|
Все делаю логично, но не работает.
Задача нужно отслеживать элемент а точнее его положение по отношению краю окна браузера.
Если он достигает самого верха нужно добавить класс, если не достиг то класс удаляется. Что я делаю я нахожу элемент и добавляю ему const soderzjaniyaStatiya1_3 = document.querySelector(".soderzjaniya_statiya:nth-child(3)").getBoundingClientRect(); В функции я пишу если если параметр 0 или меньше if(soderzjaniyaStatiya1_3.top <= 0) то выполни следующее действие, вот этому элементу добавь класс zagalovokNav1_3.classList.add("zagalovok_nav_selec t"); И вешаю то что бы отслеживать класс window.addEventListener("scroll", kraiOkna); const zagalovokNav1_3 = document.querySelector(".zagalovok_nav:nth-child(3)"); const soderzjaniyaStatiya1_3 = document.querySelector(".soderzjaniya_statiya:nth-child(3)").getBoundingClientRect(); function kraiOkna(){ if(soderzjaniyaStatiya1_3.top <= 0) { zagalovokNav1_3.classList.add("zagalovok_nav_select"); } } window.addEventListener("scroll", kraiOkna); Вот все логично но не работает так как нужно, то есть работает, но что бы сработало нужно обновить, то есть он так сказать в реальном времени не работает. |
Цитата:
где то у вас подобное было ... перенесите строку 2 в начало функции. |
Цитата:
Я просто ни как не могу запомнить эту логику, и да такое уже было. Что нужно понимать если я получил значение в не функции то он не измененное. |
Сергей Ракипов, наверняка задача может быть решена намного проще (например при помощи position: sticky; top: 0;)
|
Цитата:
там два разных блока, в одном содержание, в другом заголовки этого содержания. ну или я по крайне мере не вижу этого, хотя css знаю луче чем JS Но последнее ваше решение меня удивило. |
У меня вот что получается
function kraiOkna(){ let soderzjaniyaStatiya1_3 = document.querySelector(".soderzjaniya_statiya:nth-child(3)").getBoundingClientRect(); if(soderzjaniyaStatiya1_3.top <= 0) { zagalovokNav1_3.classList.add("zagalovok_nav_select"); } else if(soderzjaniyaStatiya1_3.top >= 0) { zagalovokNav1_3.classList.remove("zagalovok_nav_select"); } } window.addEventListener("scroll", kraiOkna); Но не то что бы проблема ну у меня таких может быть с десяток а быть может и больше const zagalovokNav1_1 = document.querySelector(".zagalovok_nav:nth-child(1)"); const zagalovokNav1_2 = document.querySelector(".zagalovok_nav:nth-child(2)"); const zagalovokNav1_3 = document.querySelector(".zagalovok_nav:nth-child(3)"); const zagalovokNav2_1 = document.querySelector(".zagalovok_nav:nth-child(4)"); const zagalovokNav2_2 = document.querySelector(".zagalovok_nav:nth-child(5)"); const zagalovokNav2_3 = document.querySelector(".zagalovok_nav:nth-child(6)"); const zagalovokNav3_1 = document.querySelector(".zagalovok_nav:nth-child(7)"); const zagalovokNav3_2 = document.querySelector(".zagalovok_nav:nth-child(8)"); const zagalovokNav3_3 = document.querySelector(".zagalovok_nav:nth-child(9)"); const soderzjaniyaStatiya1_1 = document.querySelector(".soderzjaniya_statiya:nth-child(1)"); const soderzjaniyaStatiya1_2 = document.querySelector(".soderzjaniya_statiya:nth-child(2)"); const soderzjaniyaStatiya1_3 = document.querySelector(".soderzjaniya_statiya:nth-child(3)") const soderzjaniyaStatiya2_1 = document.querySelector(".soderzjaniya_statiya:nth-child(4)"); const soderzjaniyaStatiya2_2 = document.querySelector(".soderzjaniya_statiya:nth-child(5)"); const soderzjaniyaStatiya2_3 = document.querySelector(".soderzjaniya_statiya:nth-child(6)"); const soderzjaniyaStatiya3_1 = document.querySelector(".soderzjaniya_statiya:nth-child(7)"); const soderzjaniyaStatiya3_2 = document.querySelector(".soderzjaniya_statiya:nth-child(8)"); const soderzjaniyaStatiya3_3 = document.querySelector(".soderzjaniya_statiya:nth-child(9)"); И получается что для каждого писать свою функцию это очень объемно, можно ли как то сократить |
Цитата:
|
<style> @charset "utf-8"; /* CSS Document */ *{ margin: 0; padding: 0; box-sizing: border-box; } body{ font-family: Verdana, Geneva CY, Helvetica, DejaVu Sans, Arial, sans-serif; font-size: .8rem; line-height: 160%; } .sidebar{ width: 280px; height: 100vh; position: fixed; top:0; left: 0; overflow-y: scroll; overflow-x: hidden; direction: rtl; } .zagalovok_nav{ margin: 10px 10px 10px 10px; padding: 20px 20px 20px 20px; direction: ltr; } .zagalovok_nav > h3{ color:cornflowerblue; } .zagalovok_nav > p{ color: gray; } .zagalovok_nav_select { background-color: #e2e2e2; color: #fff; } .sidebar::-webkit-scrollbar{ width: 10px; } .sidebar::-webkit-scrollbar-track{ border: 1px solid black; background-color: #F5F5F5; } .sidebar::-webkit-scrollbar{ width: 10px; background-color: #F5F5F5; } .sidebar::-webkit-scrollbar-thumb{ background-color: cornflowerblue; } .soderzjaniya{ max-width: 960px; margin: 0px 0px 0px 340px; } .soderzjaniya_statiya{ margin: 40px 20px 40px 20px; } .soderzjaniya_statiya > h3{ color: #3E62A5; } .soderzjaniya_statiya > p{ } </style> </head> <body> <div class="sidebar"> <div class="zagalovok_nav"> <h3>1.1 Заголовок</h3> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Eius, consequatur.</p> </div> <div class="zagalovok_nav"> <h3>1.2 Заголовок</h3> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Eius, consequatur.</p> </div> <div class="zagalovok_nav"> <h3>1.3 Заголовок</h3> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Eius, consequatur.</p> </div> <div class="zagalovok_nav"> <h3>2.1 Заголовок</h3> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Eius, consequatur.</p> </div> <div class="zagalovok_nav"> <h3>2.2 Заголовок</h3> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Eius, consequatur.</p> </div> <div class="zagalovok_nav"> <h3>2.3 Заголовок</h3> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Eius, consequatur.</p> </div> <div class="zagalovok_nav"> <h3>3.1 Заголовок</h3> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Eius, consequatur.</p> </div> <div class="zagalovok_nav"> <h3>3.2 Заголовок</h3> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Eius, consequatur.</p> </div> <div class="zagalovok_nav"> <h3>3.3 Заголовок</h3> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Eius, consequatur.</p> </div> <div class="zagalovok_nav"> <h3>4.1 Заголовок</h3> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Eius, consequatur.</p> </div> <div class="zagalovok_nav"> <h3>4.2 Заголовок</h3> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Eius, consequatur.</p> </div> <div class="zagalovok_nav"> <h3>4.3 Заголовок</h3> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Eius, consequatur.</p> </div> <div class="zagalovok_nav"> <h3>5.1 Заголовок</h3> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Eius, consequatur.</p> </div> <div class="zagalovok_nav"> <h3>5.2 Заголовок</h3> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Eius, consequatur.</p> </div> <div class="zagalovok_nav"> <h3>5.3 Заголовок</h3> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Eius, consequatur.</p> </div> <div class="zagalovok_nav"> <h3>6.1 Заголовок</h3> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Eius, consequatur.</p> </div> <div class="zagalovok_nav"> <h3>6.2 Заголовок</h3> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Eius, consequatur.</p> </div> <div class="zagalovok_nav"> <h3>6.3 Заголовок</h3> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Eius, consequatur.</p> </div> <div class="zagalovok_nav"> <h3>7.1 Заголовок</h3> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Eius, consequatur.</p> </div> <div class="zagalovok_nav"> <h3>7.2 Заголовок</h3> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Eius, consequatur.</p> </div> <div class="zagalovok_nav"> <h3>7.3 Заголовок</h3> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Eius, consequatur.</p> </div> <div class="zagalovok_nav"> <h3>8.1 Заголовок</h3> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Eius, consequatur.</p> </div> <div class="zagalovok_nav"> <h3>8.2 Заголовок</h3> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Eius, consequatur.</p> </div> <div class="zagalovok_nav"> <h3>8.3 Заголовок</h3> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Eius, consequatur.</p> </div> <div class="zagalovok_nav"> <h3>9.1 Заголовок</h3> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Eius, consequatur.</p> </div> <div class="zagalovok_nav"> <h3>9.2 Заголовок</h3> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Eius, consequatur.</p> </div> <div class="zagalovok_nav"> <h3>9.3 Заголовок</h3> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Eius, consequatur.</p> </div> </div> <div class="soderzjaniya"> <div class="soderzjaniya_statiya"> <h3>1.1 Заголовок</h3> <p>Lorem ipsum dolor /p> </div> <div class="soderzjaniya_statiya"> <h3>1.2 Заголовок</h3> <p>Lorem ipsum dolor sit amet, </p> </div> <div class="soderzjaniya_statiya"> <h3>1.3 Заголовок</h3> <p>Lorem ipsum dolor sit amet, </p> </div> <div class="soderzjaniya_statiya"> <h3>2.1 Заголовок</h3> <p>Lorem ipsum dolor sit amet, .</p> </div> <div class="soderzjaniya_statiya"> <h3>2.2 Заголовок</h3> <p>Lorem ipsum dolor sit amet,</p> </div> <div class="soderzjaniya_statiya"> <h3>2.3 Заголовок</h3> <p>Lorem ipsum dolor sit amet, similique </p> </div> <div class="soderzjaniya_statiya"> <h3>3.1 Заголовок</h3> <p>Lorem ipsum dolor sit amet, </p> </div> <div class="soderzjaniya_statiya"> <h3>3.2 Заголовок</h3> <p>Lorem ipsum dolor sit amet, </p> </div> <div class="soderzjaniya_statiya"> <h3>3.3 Заголовок</h3> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. </p> </div> <div class="soderzjaniya_statiya"> <h3>4.1 Заголовок</h3> <p>Lorem ipsum dolor sit amet, </p> </div> <div class="soderzjaniya_statiya"> <h3>4.2 Заголовок</h3> <p>Lorem ipsum dolor sit amet, </p> </div> <div class="soderzjaniya_statiya"> <h3>4.3 Заголовок</h3> <p>Lorem ipsum dolor sit amet, </p> </div> <div class="soderzjaniya_statiya"> <h3>5.1 Заголовок</h3> <p>Lorem ipsum dolor sit amet, </p> </div> <div class="soderzjaniya_statiya"> <h3>5.2 Заголовок</h3> <p>Lorem ipsum dolor sit amet, </p> </div> <div class="soderzjaniya_statiya"> <h3>5.3 Заголовок</h3> <p>Lorem ipsum dolor sit amet, </p> </div> <div class="soderzjaniya_statiya"> <h3>6.1 Заголовок</h3> <p>Lorem ipsum dolor sit amet.</p> </div> <div class="soderzjaniya_statiya"> <h3>6.2 Заголовок</h3> <p>Lorem ipsum dolor sit </p> </div> <div class="soderzjaniya_statiya"> <h3>6.3 Заголовок</h3> <p>Lorem ipsum dolor sit</p> </div> <div class="soderzjaniya_statiya"> <h3>7.1 Заголовок</h3> <p>Lorem ipsum dolor sit amet, </p> </div> <div class="soderzjaniya_statiya"> <h3>7.2 Заголовок</h3> <p>Lorem ipsum dolor sit amet, </p> </div> <div class="soderzjaniya_statiya"> <h3>7.3 Заголовок</h3> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. In quas recusandae ad </p> </div> <div class="soderzjaniya_statiya"> <h3>8.1 Заголовок</h3> <p>Lorem ipsum dolor sit amet, </p> </div> <div class="soderzjaniya_statiya"> <h3>8.2 Заголовок</h3> <p>Lorem ipsum dolor sit amet,</p> </div> <div class="soderzjaniya_statiya"> <h3>8.3 Заголовок</h3> <p>Lorem ipsum dolor sit </p> </div> <div class="soderzjaniya_statiya"> <h3>9.1 Заголовок</h3> <p>Lorem ipsum dolor </p> </div> <div class="soderzjaniya_statiya"> <h3>9.2 Заголовок</h3> <p>Lorem ipsum dolor </p> </div> <div class="soderzjaniya_statiya"> <h3>9.3 Заголовок</h3> <p>Lorem ipsum dolor .</p> </div> </div> И нужно понимать что где блоки с текстом статей я убрал большое количество символов, что бы соответствовать допустимому количеству символов для размещение поста. С левого боку содержание, а с правого основные статьи |
И тоже самое как сократить вот это
function statia1_3() { soderzjaniyaStatiya1_3.scrollIntoView({block: "start", behavior: "smooth"}); } zagalovokNav1_3.addEventListener("click", statia1_3); мне кажется что каждый раз делать функцию это перебор у меня таких может быть не один десяток |
Цитата:
|
Часовой пояс GMT +3, время: 18:33. |
|