我是用的是jquery 3.3.1版本
不知道为什么,就是这么奇怪,只能使用$(body).scroll,暂时没想到为什么,应该和css设置有关。
更新 同样的代码,修改了css的样式之后,$(windows).scroll便可以起作用了。我自己的想法是,如上图所示,虽然右侧有滚动条,但是这个滚动条说来自于body,还是window,影响着是$(window).scroll还是$(body).scroll起作用。window对象表示浏览器中打开的窗口,即是一个浏览器窗口只有一个window对象。document对象是载入浏览器的html文档,即是window载入document。body对象代表html文档的主体(html body)。
2.获取文档的宽和高 理论上是这样的,$(选择器)然后执行以下方法,可以获取不同的宽度和高度。
1 2 3 4 5 6 7 8 9 10 11 $("" ).width () - 返回元素的宽度。 $("" ).height () - 返回元素的高度。 $("" ).innerWidth () 方法返回元素的宽度(包括内边距)。 $("" ).innerHeight () 方法返回元素的高度(包括内边距)。 $("" ).outerWidth () 方法返回元素的宽度(包括内边距和边框)。 $("" ).outerHeight () 方法返回元素的高度(包括内边距和边框)。 $("" ).outerWidth (true ) 方法返回元素的宽度(包括内边距、边框和外边距) $("" ).outerHeight (true ) 方法返回元素的高度(包括内边距、边框和外边距)。 $(document ).height ()返回文档(HTML 文档)的高度 $(window ).height ()返回窗口(浏览器视口)的高度
但是我实际上通过height()、innerHeight()、outerHeight()、outerHeight(true)获取的高度都是一样的,并不包含内边距边框和外边距。
3.判断元素是否在窗口中可见 1 2 3 4 5 6 7 var top=$('元素' ).offset ().top - $(window ).scrollTop ();var wH=$(window ).height ();if (top<=wH){ }else { }
4.侧边栏元素随滚动条滚动,到达底部后不再滚动 1 2 3 4 5 6 7 8 9 10 11 12 13 14 .parent { position : relative; overflow :auto; } .side-tool { position : fixed; right : 60px ; bottom : 30px ; } .side-tool .static :{ position : absolute; right : -150px ; }
1 2 3 4 5 6 7 <div class ="parent" > <div class ="other" > </div > <div class ="side-tool" > </div > </div > <footer class ="footer" > </footer >
原理即,进入页面时,首先设置侧边栏fixed布局,然后鼠标滚动时侧边栏会跟着鼠标移动,当底部菜单出现时,将fixed定位去掉,加入absolute定位(side-tool父元素应该具有position:relative,这样absolute定位即为相对于父元素定位)
1 2 3 4 5 6 7 8 9 10 11 var $footer=$(".footer" ); var windowH=$(window ).height (); var $sideTool=$post_wrap.find (".side-tool" ); $("body" ).on ("scroll" ,function ( ){ var distanceTop=$footer.offset ().top - $(window ).scrollTop (); if (distanceTop<=windowH){ $sideTool.addClass ("static" ); }else { $sideTool.removeClass ("static" ); } });