Как исправить ошибки в скрипте?
Добрый день! Помогите, пожалуйста, исправить ошибки в скрипте, есть несколько моментов. Бьюсь уже долгое время, но безрезультатно, очень нужна помощь настоящих специалистов.
Первый момент: здесь при просмотре, обратите пожалуйста внимание, почему-то блок №1 при прокрутке пропадает. Хотя, у меня он "скользит" без ошибок. Структуру html, css и сам скрипт скопировал и вставил сюда без изменений. Второй момент: не могу понять, почему не "скользит" блок №2. Даже если блоку №2 присваиваю другой Id и идентифицирую его отдельно, все равно стоит на месте. Третий момент: при прокрутке страницы вниз "липкий" блок сначала прилипает к верху, а в конце уже прокручивается. При прокрутке страницы вверх "липкий" блок прокручивается, а потом уже прилипает. Как его заставить при прокрутке страницы вниз вести себя также, как и при прокрутке страницы вверх. То есть, сначала блок прокручивается, после чего уже прилипает, но не наоборот. И последний момент: в случае, если контента на странице совсем мало (имеется ввиду в блоке .article), то происходит "дерганье" липкого блока и страница не прокручивается вниз. Очень вам благодарен за помощь! <style> html, body {width:100%;height:100%;} div {margin:0;padding:0;} .container { display:block; position: relative; overflow: hidden; width: 100%; max-width: 900px; min-width: 320px; } .wrapper { display:block; position: relative; overflow: hidden; width: 100%; padding-left: 100px; } .header { display:block; position: relative; width: 100%; height: 120px; background: #ccc; } .article { float: left; display: inline-block; position: relative; padding-right: 100px; } .content { display: block; position: relative; width: 100%; } .aside { float: left; display: inline-block; position: relative; width: 100px; margin-left: -100px; background: blue; color: #fff; } .sidebar { display:block; position: absolute; top: 0; left: 0; width: 100px; height: 100%; background: red; color: #fff; } .banner { display: block; position: relative; width: 100%; height: 100px; background: chocolate; color: #fff; } .footer { display:block; position: relative; width: 100%; height: 200px; background: #ccc; } </style> <div class="container"> <div class="wrapper"> <div class="header">Лого</div> <div class="article"> <div class="content"> <p>Когда б не смутное влеченье Чего-то жаждущей души,<br> Я здесь остался б — наслажденье Вкушать в неведомой тиши:<br> Забыл бы всех желаний трепет, Мечтою б целый мир назвал —<br> И всё бы слушал этот лепет. Всё б эти ножки целовал…</p> <p>Когда б не смутное влеченье<br> Чего-то жаждущей души,<br> Я здесь остался б — наслажденье<br> Вкушать в неведомой тиши:<br> Забыл бы всех желаний трепет,<br> Мечтою б целый мир назвал —<br> И всё бы слушал этот лепет.<br> Всё б эти ножки целовал…</p> <p>Когда б не смутное влеченье<br> Чего-то жаждущей души,<br> Я здесь остался б — наслажденье<br> Вкушать в неведомой тиши:<br> Забыл бы всех желаний трепет,<br> Мечтою б целый мир назвал —<br> И всё бы слушал этот лепет.<br> Всё б эти ножки целовал…</p> <p>Когда б не смутное влеченье<br> Чего-то жаждущей души,<br> Я здесь остался б — наслажденье<br> Вкушать в неведомой тиши:<br> Забыл бы всех желаний трепет,<br> Мечтою б целый мир назвал —<br> И всё бы слушал этот лепет.<br> Всё б эти ножки целовал…</p> <p>Когда б не смутное влеченье<br> Чего-то жаждущей души,<br> Я здесь остался б — наслажденье<br> Вкушать в неведомой тиши:<br> Забыл бы всех желаний трепет,<br> Мечтою б целый мир назвал —<br> И всё бы слушал этот лепет.<br> Всё б эти ножки целовал…</p> <p>Когда б не смутное влеченье<br> Чего-то жаждущей души,<br> Я здесь остался б — наслажденье<br> Вкушать в неведомой тиши:<br> Забыл бы всех желаний трепет,<br> Мечтою б целый мир назвал —<br> И всё бы слушал этот лепет.<br> Всё б эти ножки целовал…</p> </div> </div> <div class="aside"><div id="sticky1"> <h3>БЛОК №1</h3> <p>Я памятник себе воздвиг нерукотворный,<br> К нему не зарастет народная тропа,<br> Вознесся выше он главою непокорной<br> Александрийского столпа.</p> <p>Я памятник себе воздвиг нерукотворный,<br> К нему не зарастет народная тропа,<br> Вознесся выше он главою непокорной<br> Александрийского столпа.</p> <p>Я памятник себе воздвиг нерукотворный,<br> К нему не зарастет народная тропа,<br> Вознесся выше он главою непокорной<br> Александрийского столпа.</p> <p>Я памятник себе воздвиг нерукотворный,<br> К нему не зарастет народная тропа,<br> Вознесся выше он главою непокорной<br> Александрийского столпа.</p> </div></div> </div> <div class="sidebar"> <p>Я памятник себе воздвиг нерукотворный,<br> К нему не зарастет народная тропа,<br> Вознесся выше он главою непокорной<br> Александрийского столпа.</p> <div class="banner"><div id="sticky2"> <h3>БЛОК №2</h3> </div></div> </div> </div> <div class="footer">Подвал</div> <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <script> (function($) { jQuery.fn.stickyBox = function(options) { var defaults = { notStickyBreakpoint: 100, spaceTop: 0, stopper: true, stopperSpace: 0 }; var config = $.extend(defaults, options); if ($(window).innerWidth() <= config.notStickyBreakpoint) { return this; } var stopper; if (config.stopper !== false) { stopper = $(config.stopper).first(); } return this.each(function() { var box = $(this); box.initialStyle = box.attr('style'); box.parentElement = box.parent(); box.alreadyStopped = false; setBoxProperties(box); $(window).on('resize', function() { setBoxProperties(box); setBoxPosition(box); }); setBoxPosition(box); $(window).on('scroll', function() { setBoxPosition(box); }); }); function setBoxProperties(box) { resetBox(box); var offsetTop = box.offset().top; var offsetLeft = box.offset().left; var boxSizing = box.css('box-sizing'); var width; if (boxSizing == 'border-box') { width = box.outerWidth(); } else { width = box.width(); } box.intialOffsetTop = offsetTop; box.intialOffsetLeft = offsetLeft; box.initialWidth = width; } function setBoxPosition(box) { if (!box.alreadyStopped && (($(window).scrollTop() >= box.intialOffsetTop - config.spaceTop) || (box.stopPosition !== undefined && $(window).scrollTop() >= box.stopPosition))) { box.parentElement.css({ position: 'relative' }); var position = 'fixed'; var top = config.spaceTop; if (box.stopPosition !== undefined && $(window).scrollTop() >= box.stopPosition) { position = 'absolute'; top = box.stopPosition + config.spaceTop - box.parentElement.offset().top; } box.css({ position: position, top: top, marginTop: 0, width: box.initialWidth }); } else { resetBox(box); } } function resetBox(box) { if (box.initialStyle !== undefined) { box.attr('style', box.initialStyle); } else { box.removeAttr('style'); } if (config.stopper !== false && stopper.length > 0) { var stopperTop = stopper.offset().top; if (stopperTop > box.offset().top + box.outerHeight() + config.stopperSpace) { box.alreadyStopped = false; box.stopPosition = stopperTop - (config.spaceTop + box.outerHeight() + config.stopperSpace); } else { box.alreadyStopped = true; } } } }; })(jQuery); $(document).ready(function() { $('#sticky1').stickyBox({ stopper: '.footer' }); $('#sticky2').stickyBox({ stopper: '.footer' }); }); </script> |
LADYX,
На беглый просмотр строка 175 stoppper: true, |
Dilettante_Pro,
приветствую вас! Ошибку исправил, спасибо. Но без изменений. |
LADYX,
Одинаковых id не должно быть ни в коем случае. Попробуйте сделать блоки 1 и 2 не вложенными. Например, вместо <div class="banner"><div id="sticky"> <h3>БЛОК №2</h3> </div></div> сделать <div class="banner" id="sticky2"> <h3>БЛОК №2</h3> </div> Ну и, естественно, $(document).ready(function() { $('#sticky1').stickyBox({ stopper: '.footer' }); $('#sticky2').stickyBox({ stopper: '.footer' }); }); |
Dilettante_Pro,
Да, про одинаковые id я знаю. Здесь дело в другом: конечно, блок №2 прилипает, но весь остальной контент, который находится в блоке .sidebar при прокрутке страницы становится за блоком №2, т.е. ниже его. А когда страницу возвращаем наверх, то этого контента в блоке .sidebar уже нет. У нас блок .sidebar в стиле имеет свойство position:absolute, вот наверное в этом причина. Но что можно сделать, я даже не могу придумать. Этот блок .sidebar, да и вся html-структура должна у меня сохраниться, ее нельзя менять или исправлять. |
Да, кстати, что касается вложенности, то я не могу их сделать не вложенными. Вот и задача, что нужно мне как-то скрипт подогнать именно под мою уже существующую структуру.
|
Dilettante_Pro,
стоп, вы меня простите, что касается второго блока, то всё в порядке, он "скользит" как нужно, это я у себя не внимательно сделал. Этот момент снимается, все работает, извините меня. Остается мне только по остальным моментам решить задачу. |
Уважаемые специалисты, прошу у вас помощи. Самому самостоятельно поправить скрипт не удается. Надеюсь на вашу помощь. Благодарю.
|
Часовой пояс GMT +3, время: 04:28. |