Как сфокусироваться на разных частях изображения при прокрутке пользователем?CSS

Разбираемся в CSS
Ответить Пред. темаСлед. тема
Anonymous
 Как сфокусироваться на разных частях изображения при прокрутке пользователем?

Сообщение Anonymous »

У меня есть изображение, в котором я пытаюсь увеличить изображение до определенных областей на основе прокрутки пользователя.
Когда пользователь прокручивает до divid=para2 и divid=para4, мой код увеличивается. В конце из div, он уменьшается. Он работает правильно, однако мне не удается заставить para4 сфокусироваться или увеличить другую область изображения. Когда пользователь переходит к абзацам 2 и 4, кажется, что графика теперь масштабируется в фоновом положении: 72% 43%; (указан в CSS). Как я могу изменить код так, чтобы при переходе пользователя к пункту 4 изображение увеличивалось до фонового положения: 12% 93%;? Это мой код:

Код: Выделить всё

const d1 = document.querySelector(".d1");
const par3 = document.querySelector("#par2");
const par4 = document.querySelector("#par4");

let toPar2 = false;
let toPar4 = false;

const par3InitialY = par2.offsetTop;
const par4InitialY = par4.offsetTop;

document.addEventListener("scroll", (evt) => {
const r1 = scrollY - par3InitialY;
const s1 = r1 < 0 ? 1 : 1 + r1 / 200;

const r2 = scrollY - par4InitialY;
const s2 = r2 < 0 ? 1 : 1 + r2 / 200;

d1.style.backgroundSize = (toPar2 ? s1 : 1) * (toPar4 ? s2 : 1) * 100 + "%";
});

const observer1 = new IntersectionObserver((entries) => entries.forEach((entry) => (toPar2 = entry.isIntersecting)));
observer1.observe(par2);

const observer2 = new IntersectionObserver((entries) => entries.forEach((entry) => (toPar4 = entry.isIntersecting)));
observer2.observe(par4);

Код: Выделить всё

.d1 {
width: 50%;
aspect-ratio: 2/1;
position: sticky;
top: 0;
background-image: url(http://picsum.photos/id/451/1500/750);
background-size: 100%;
background-position: 72% 43%;
transition: background-size 0.5s ease; /* Smooth transition */
}
#par1
{ height:
100px;
/*
Just for demo, adjust as needed */ }
#par2
{ height:
500px;
/*
Just for demo, adjust as needed */ }
#par3
{ height:
2500px;
/*
Just for demo, adjust as needed */ }
#par4
{ height:
2500px;
/*
Just for demo, adjust as needed */ }

Код: Выделить всё


Paragraph1 sit amet, consectetur adipiscing elit. Maecenas tempor nunc mauris, sit amet placerat tortor lobortis dapibus. Nam lectus eros, maximus ac magna vel, congue consequat eros. Fusce id pretium diam. Cras sit amet pharetra ante. Sed quis commodo quam, vel facilisis ipsum. Vestibulum sodales iaculis arcu, et fringilla nisi ullamcorper sed. Donec interdum sit amet est non accumsan. Donec non augue feugiat, fermentum nunc non, convallis est. Cras vel ligula nec odio faucibus ultricies. Sed vulputate tortor eget pretium convallis. Cras interdum elit eget mi porta suscipit. Morbi ut velit diam. Etiam finibus eros et efficitur rutrum. Quisque viverra metus ac eleifend imperdiet. Quisque pretium ut purus vitae tempus. Duis varius risus congue velit faucibus, sed interdum purus consectetur.

Paragraph2 Cras volutpat velit non mi sagittis condimentum. Cras tempor aliquet turpis sed pretium. Nunc aliquet sodales turpis quis ultrices. Duis auctor accumsan enim, quis maximus ex malesuada a. Donec a felis ut erat tempus euismod non vel neque. Proin lectus massa, sagittis at imperdiet nec, consequat ut neque. Sed vel placerat neque, vel varius urna. Vivamus interdum euismod urna a accumsan. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.

Paragraph3 Nulla rhoncus aliquam mauris, eu pretium dolor auctor in. Maecenas a sollicitudin dolor, eget commodo quam. Proin et dui sed ligula vulputate egestas. Quisque eget augue vitae purus placerat pharetra. Aliquam rhoncus convallis lorem, sed facilisis odio blandit scelerisque. Vivamus viverra urna ac nulla interdum, eget ullamcorper leo maximus. Mauris nec feugiat enim. Nam congue, dui sit amet vestibulum posuere, leo mauris fermentum lorem, eget bibendum velit nunc quis leo.

Paragraph4 Sed sed cursus leo. Nam molestie eleifend leo, nec fermentum risus maximus ac. Pellentesque eget placerat ipsum. Vestibulum tempor quam justo. Fusce dapibus turpis non ante faucibus suscipit. Fusce rhoncus eleifend ipsum et lacinia. Curabitur nec congue arcu. Mauris dignissim magna ligula.  Nullam ultrices, metus sit amet ultrices porttitor, turpis ligula interdum enim, eu pellentesque purus quam ut arcu. Nullam aliquet vitae tortor vel tincidunt. Fusce maximus lacus diam, sed elementum ligula condimentum vel. Sed consequat orci ac nunc gravida, at accumsan magna porttitor.

Mauris vulputate quam ac purus laoreet, nec ultrices eros placerat. Fusce id nisi ex. Nunc ornare tellus nisl, suscipit fermentum quam sodales sit amet. Ut ex magna, tempor nec ex sed, ornare ornare sem. Proin gravida turpis urna, vitae posuere purus consequat sit amet. Donec laoreet tempor massa. Praesent porta mauris vitae neque condimentum, non volutpat felis eleifend.

Aliquam aliquam a est eget cursus. Ut eu tempus justo, rutrum dapibus ex. In hac habitasse platea dictumst. Nulla ornare nisi sit amet arcu semper maximus. Praesent eu augue eget mi sodales sodales. Praesent sodales neque malesuada, euismod est in, lobortis turpis. Nam blandit facilisis mauris. Ut ac ex rhoncus, ornare velit ac, aliquam nibh. Quisque euismod mauris quis nisl consectetur vulputate. Pellentesque mattis, tellus ut dictum dictum, urna ligula sodales magna, euismod malesuada ipsum quam nec elit.

Duis sit amet eros non est lacinia posuere et et ex. Proin in dui ornare ex eleifend pharetra. Etiam eros urna, euismod eget porttitor et, tempor quis turpis. Nullam sollicitudin suscipit lorem, maximus pellentesque turpis dictum sed. Integer fringilla gravida tellus sit amet facilisis. Pellentesque vel porta justo. Proin vehicula eget tortor ut condimentum. Phasellus interdum urna a condimentum dapibus. Sed commodo elit a metus vestibulum, ac vehicula mi tincidunt. Duis ante quam, posuere eget purus et, mollis congue tortor. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nunc quis orci porttitor, dictum libero sit amet, feugiat ipsum.

Nunc auctor lorem vitae neque sodales cursus. Sed scelerisque tempor tincidunt. Praesent eu pretium mi. Duis vitae venenatis nunc. Integer dolor sapien, vehicula ac dui id, fermentum malesuada justo. Donec ullamcorper enim sed nulla egestas condimentum. Etiam vitae dapibus sem, ut efficitur nulla. Donec laoreet, nunc quis aliquet blandit, erat nibh facilisis nibh, ut fermentum nisl dolor vel dui. Nunc pulvinar scelerisque urna, ut dictum purus placerat ac.



Подробнее здесь: https://stackoverflow.com/questions/784 ... ser-scroll
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как сфокусироваться на разных частях изображения при прокрутке пользователем?
    Anonymous » » в форуме Jquery
    0 Ответы
    27 Просмотры
    Последнее сообщение Anonymous
  • Телебот (Телеграм-бот). Идентификатор пользователя, похоже, различается в разных частях кода.
    Anonymous » » в форуме Python
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Как сфокусироваться на перетаскивании тени при включенной обратной связи?
    Anonymous » » в форуме Android
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Как сфокусироваться на окне с помощью Python?
    Anonymous » » в форуме Python
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Qt 6.8 Как заставить камеру QML снова сфокусироваться
    Anonymous » » в форуме Android
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous

Вернуться в «CSS»