Липкий блок после определенного класса
Доброй ночи ребята!
Ищу липкий блок. Вчем суть, ищу такой блок который покажется когда скролингом дойдешь до определенного класса, например к кнопке. Если это невозможно, то может есть рабочий скрипт который отобразит липкий блок спустя N пиксе и скроет на N пикселях от верха? |
|
Цитата:
Я вот нашел рабочий вариант и он мне подходит. Единственая проблема в том, что он заменяет уже существующий клас, не добавляет. Если прописать addClass, то класс с (display:none) недобавиться... Пожет подправите чтоб я смог на мобильной версии иметь другой класс?
function getBodyScrollTop() {
var offset = self.pageYOffset || (document.documentElement && document.documentElement.scrollTop) || (document.body && document.body.scrollTop);
if (offset > 300) {
document.querySelector('#oct-slide-panel').className = "KT-buy-none";
}
if (offset > screen.height - 300) {
document.querySelector('#oct-slide-panel').className = "KT-buy-fixed";
}
}
window.addEventListener("scroll", getBodyScrollTop);
|
Alexprom,
удалить или добавить класс элементу, https://learn.javascript.ru/styles-a...me-i-classlist
document.querySelector('#oct-slide-panel').classList.add('KT-buy-none');
document.querySelector('#oct-slide-panel').classList.remove('KT-buy-none');
|
Alexprom,
сделайте макет html и css, например: [html run] ... минимальный код страницы с вашей проблемой [/html] О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting. |
IntersectionObserver toggle
Alexprom,
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">
p{
height: 500px;
}
#oct-slide-panel{
position: fixed;
display: none;
}
#oct-slide-panel.show{
display: block;
}
</style>
<script>
document.addEventListener('DOMContentLoaded', function() {
let panel = document.querySelector('#oct-slide-panel');
const lazyShow = btns => {
btns.forEach(({intersectionRatio}) => {
panel.classList.toggle('show', intersectionRatio > .3);
});
};
let observer = new IntersectionObserver(lazyShow, {
rootMargin: "10px",
threshold: [.3]
});
document.querySelectorAll('.btn').forEach(elem => observer.observe(elem));
});
</script>
</head>
<body>
<div id="oct-slide-panel">вижу кнопу</div>
<p></p>
<button class="btn">кнопа</button>
<p></p>
</body>
</html>
|
Большое спасибо, разобрался)
|
| Часовой пояс GMT +3, время: 22:56. |