限制窗口滚动动画的CSS值限制
在此场景中,用户遇到了地图元素滚动时滑动的问题往下翻页。然而,地图会继续无限滚动,由于页脚的存在,导致用户无法到达页面底部。
目标是限制表示地图的
提供的 JavaScript 代码使地图随着用户滚动而移动:
$(function() { var $sidebar = $("#map"), $window = $(window), offset = $sidebar.offset(), topPadding = 15; $window.scroll(function() { if ($window.scrollTop() > offset.top) { $sidebar.stop().animate({ marginTop: $window.scrollTop() - offset.top topPadding }); } else { $sidebar.stop().animate({ marginTop: 0 }); } }); });
解决问题
不建议在滚动函数中使用 animate() 方法,因为它可能会因滚动条的不断变化而导致冲突滚动值,防止 jQuery 执行重复的动画。仅使用 stop() 函数可能无法完全解决问题。
相反,建议使用 CSS 方法。这是一个例子:
$(window).scroll(function() { var scrollVal = $(this).scrollTop(); if ( scrollVal > offset.top) { $sidebar.css({ 'margin-top': (($window.scrollTop() - offset.top) topPadding) 'px' //added 'px' here to prevent old internet explorer bugs }); } else { $sidebar.css({'margin-top':'0px'}); } });
此外,避免在计算中使用多个 if else 语句,因为这也可能导致冲突。
替代方法
For目标是将导航元素固定在特定滚动位置的场景,请考虑以下方法:
$(document).ready(function() { $(window).scroll(function() { var headerH = $('.header').outerHeight(true); //this will calculate header's full height, with borders, margins, paddings console.log(headerH); var scrollVal = $(this).scrollTop(); if ( scrollVal > headerH ) { //when scroll value reach to your selector $('#subnav').css({'position':'fixed','top' :'0px'}); } else { $('#subnav').css({'position':'static','top':'0px'}); } }); });
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3