使用jquery写一个热键(J/K)动态滚动浏览插件

加班之余很无聊,几分钟足够写个彩蛋夹在里面自娱自乐。。。

实现的效果很简单,用j/k键自动翻滚上一条/下一条动态信息,和twitter、微博、g+等等一样,乃懒人IB利器。

主要解决的问题就是判断当前显示在第几条之上,如此获得动态列表中一条的索引位置,从而得到之前或之后对应的scrollTop值。为此需要遍历当前动态列表的每个元素,对其和当前的窗口scrollTop值作对比,把刚好不大于该值的那条索引作为参考物来进行之后的计算。

基本的代码如下:


var eventNS='keydown.timelineHotkeys';
$(document).unbind(eventNS).bind(eventNS,function(e){
//wrapobj为动态列表外的包裹对象
var wrapobj=$('.timeline-feeds:visible').eq(0);
if(wrapobj.length>0){
var code = e.keyCode;
//feedItemList为每个动态列表对象
var feedItemList=wrapobj.find('.item');
if(code===74||code===75){
var scrollTop=$(window).scrollTop();
//这里的60像素是页面顶部到第一条动态之间的间隔距离
var feed2TopPx=60;
scrollTop+=feed2TopPx;
var curViewIndex=-1;
var curOfst=0;
feedItemList.each(function(i){
var ofst=$(this).offset().top;
if(ofst<scrollTop){
curViewIndex=i;
curOfst=ofst;
}
});
if(code === 74) { // 按下j键时的处理(down)
curViewIndex+=2;
curOfst=feedItemList.eq(curViewIndex).offset().top-feed2TopPx;
}else{ // 按下k键时的处理 (up)
if(curViewIndex!=-1){
curViewIndex=curViewIndex>0?curViewIndex:0;
curOfst=feedItemList.eq(curViewIndex).offset().top-feed2TopPx;
}
}
$('body,html').animate({ scrollTop: curOfst}, 100);
}
}else{
$(this).unbind(eventNS);
}
});

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值