修复,滚动时取消固定元素
Fixing & Unfixing Element When Scrolling
我有一个.SideNav
浏览我的网站和.Main
这是页面的内容。.SideNav
是相应的,因此有可能将其扩展到大于.Main
含量的高度,反之亦然。
我想要达到的是,当你在页面上滚动;
IF .SideNav < $(document).height()
- .SideNav
固定,.Main
可以正常滚动。IF .SideNav < $(document).height()
- .SideNav
将变得固定,当你滚动到$(document).height()
,因此大于.Main
正常滚动。但是,当你开始向上滚动时,.SideNav
将能够滚动到顶部位置,并在顶部可见时再次固定。
结合所有方法的页面滚动以及跨浏览器兼容性;
- 滚动条 键盘
- 向上/向下键
- 页面上下键
老鼠- Mousewheel
- 鼠标滚轮-点击并拖动
我一直在浏览StackOverflow上的多个问题和答案,这些问题和答案一直是有人足智多谋,例如我当前的滚动方向检测,但是当您单击鼠标滚轮时,这不起作用,我一直无法解决我的主要问题。
我的代码:
jQuery(document).ready(function ($) {
'use strict';
var mousewheelevt = (/Firefox/i.test(navigator.userAgent)) ? "DOMMouseScroll" : "mousewheel"; //FF doesn't recognize mousewheel as of FF3.x
$(document).bind(mousewheelevt, function(e){
var evt = window.event || e; //equalize event object
evt = evt.originalEvent ? evt.originalEvent : evt; //convert to originalEvent if possible
var delta = evt.detail ? evt.detail*(-40) : evt.wheelDelta; //check for detail first, because it is used by Opera and FF
var wh = $(window).height();
var spt = $(document).scrollTop();
var spb = $(document).scrollTop() + wh;
var mainDiv = $('.Main').height() + $('.Main').offset().top;
if(delta > 0) {
console.log('Up');
}
else{
if(mainDiv <= spb) {
console.log('mainDIV: ' + mainDiv + ' spb: ' + spb);
var te = '-' + (mainDiv - wh) + 'px';
$('.Main').css({
'position' : 'fixed',
'top' : te
});
}
}
});
});
Tim,如果你已经在使用jQuery,我认为最好的选择是实现jQuery滚动方法。他们已经处理了跨浏览器和不同的滚动选项。在scroll方法中,您可以调用自己定义的函数来处理元素的高度和使用scrollTop的用户的滚动位置。下面是我所做的一些工作的例子,其中只有一侧可能比另一侧短(添加的额外数字是为了说明填充和在正确的时刻停止):
var scrollPosSetup = function(){
var mainHeaderHeight = $('.hero').outerHeight() + 100;
var footerHeight = $('footer').outerHeight() + $('.logo-bar').outerHeight() + 240;
var footerScrollPos = $('html').height() - (footerHeight + sidebarWrapperHeight);
var rightSide = (window.innerWidth < 961) ? '30px' : '10%';
if (window.innerWidth > 767) {
if($(document).scrollTop() > mainHeaderHeight &&
$(document).scrollTop() < footerScrollPos) {
$contactContainer.css({
'position' : 'fixed',
'top' : '0px',
'right' : rightSide
});
} else if ($(document).scrollTop() >= footerScrollPos ) {
$contactContainer.css({
'position' : 'relative',
'top' : footerScrollPos - 500,
'right' : ''
});
} else {
$contactContainer.css({
'position' : 'relative',
'top' : '',
'right' : '',
'bottom' : ''
});
}
}
};
$(window).scroll(function ( e ) {
scrollPosSetup();
});
相关文章:
- 使用javascript取消隐藏和隐藏表单中的某些元素
- 从父元素取消绑定滚动事件并绑定到子元素
- 使用Javascript取消隐藏元素
- 当函数取消隐藏 2 个元素时,如何在 javascript 中显示/隐藏
- 元素单击处理程序由一个神秘的函数取消设置
- 取消:活动元素样式
- Javascript似乎并没有取消隐藏我的元素
- 在鼠标悬停/取消悬停父元素时,更改子图像的url哈希
- 使用onclick事件取消隐藏多个元素
- 取消选择下拉项时从数组中删除元素
- 在其他元素的基础上隐藏/取消隐藏jsp元素
- 通过javascript函数取消设置php数组元素
- 取消选中表单元素时,如何减去 javascript 变量的值
- 临时取消绑定鼠标输入从元素
- jQuery:取消选择select元素中的选项
- jQuery取消选中并选中子元素的反之亦然复选框
- 聚合物 IronRessizeableBehavior 当“可调整大小”元素被隐藏/取消隐藏时,不会触发 Iron 调整
- 引导程序使用 js 检查/取消选中多个元素
- 取消设置元素可见性,更改 innerHTML,然后转换回来
- 如何通过 JavaScript 取消隐藏隐藏的 asp 元素