首先,我没有编写此代码。我在别人的网站上找到了它,我想通过自己尝试来学习它。但是我不能让它工作。我已经用谷歌搜索了代码,以防它是一个免费提供的 jQuery 插件或任何东西,但我在网络上的任何地方都找不到它。
我有我的侧边栏(带有 id #sidebar)并给了它“粘性”类,我在页面顶部包含了 jQuery,并且我已经把这段代码放在了头部:
<!-- Floating sidebar jQuery -->
<script type="text/javascript">
var Sticky = function( $obj, opts ){
$(window).scroll(
function(e){
Sticky.onScroll(e, $obj, opts );
});
}
Sticky.onScroll = function( e, $o, opts ){
var iScrollTop = $(window).scrollTop();
var sClass = "sticky";
//set original data
if( !$o.data(sClass) ){
$o.data(sClass, {css:{position:$o.css('position'),top:$o.css('top')}, offset:$o.offset()} );
}
var oOrig = $o.data(sClass);
var bIsSticky = $o.hasClass(sClass);
if( iScrollTop > oOrig.offset.top && !bIsSticky ){
$o.css({position:'fixed',top:0}).addClass(sClass);
}else if(iScrollTop < oOrig.offset.top && bIsSticky){
$o.css(oOrig.css).removeClass(sClass);
}
}
Sticky( $('#sidebar') );
</script>
如您所见,最后的 JS 行在Sticky( $('#sidebar') );
#sidebar 元素上触发。但是,当您向下滚动时,此错误会写入 Chrome 的日志:
未捕获的类型错误:无法读取未定义的属性“偏移量”
Firebug 有点冗长,它说:
oOrig 未定义:
if( iScrollTop > oOrig.offset.top && !bIsSticky ){
我正在尽力理解这一点,但有人可以帮我看看为什么它不起作用吗?
谢谢!
杰克