请教控制滚动 div 的同时不滚动页面, 当 div 滚动到底部时同样不滚动页面! - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
revir
V2EX nbsp;  CSS

请教控制滚动 div 的同时不滚动页面, 当 div 滚动到底部时同样不滚动页面!

  •  
  •   revir 2014-10-23 23:49:35 +08:00 13069 次点击
    这是一个创建于 4075 天前的主题,其中的信息可能已经有所发展或是发生改变。
    jsbin见: http://jsbin.com/racowa/1/
    左边一栏可以滚动, 但是滚动到底后会导致整个页面都滚动。
    我希望达到的效果是像 feedly 一样, http://feedly.com/#my , 左边栏滚动到底时不能滚动整个页面, 只有当鼠标移出左边栏, 页面才能滚动。
    该怎样办到呢? 如果能借助 js 做到也行!
    非常感谢!
    8 条回复    2014-12-05 12:36:32 +08:00
    chairuosen
        1
    chairuosen  
       2014-10-24 00:07:47 +08:00 via iPad
    让右侧内容也是内部滚动
    abelyao
        2
    abelyao  
       2014-10-24 00:10:43 +08:00
    大概思路有两个:
    思路一:当鼠标处于某 div 之内触发 scroll 事件的时候,判断是否已经滚动到底部,如果已经到底部了,就停止停止事件,可能还需要对事件的冒泡进行处理,防止继续触发 window 的 scroll 事件;
    思路二:当触发 window 的 scroll 事件时,判断鼠标的位置是否在 div 之内,是的话则不停止 window 的 scroll 事件;
    随便想到的,仅供参考。
    如果到明天仍然没解决,我再写一个 demo 出来试试,现在要睡觉了 :)
    jsonline
        3
    jsonline  
       2014-10-24 00:32:05 +08:00
    1. 不用试图阻止 scroll 事件的冒泡,你会后悔的。
    2. 学会使用开发者工具查看别人网站的结构
    abelyao
        4
    abelyao  
       2014-10-24 10:22:26 +08:00
    revir
        5
    revir  
    OP
       2014-10-24 12:57:06 +08:00
    @abelyao

    @chairuosen
    @jsonline

    多谢指教, 已经解决了。
    这是我写的一个函数, 依赖 jQuery, 在chrome下测试通过:

    ```Javascript
    var soloWheel = function(element) {
    window.Onmousewheel= function(event) {
    var el, h;
    el = $(element)[0];
    h = $(element).height();
    if ($(element).has(event.srcElement).length || $(element).is(event.srcElement)) {
    if (el.scrollTop < 5 && event.wheelDelta > 0) {
    event.preentDefault();
    }
    if (el.scrollHeight - el.scrollTop - h < 5 && event.wheelDelta < 0) {
    event.preventDefault();
    }
    }
    };
    };
    ```

    jsbin 地址: http://jsbin.com/racowa/2/
    abelyao
        6
    abelyao  
       2014-10-24 13:05:14 +08:00   1
    @revir 我根据那帖子做的,兼容 IE6 …
    document.getElementById('side').Onmousewheel= function(event) {
    if (!event) event = window.event;
    this.scrollTop = this.scrollTop - (event.wheelDelta ? event.wheelDelta : -event.detail * 10);
    return false;
    }
    revir
        7
    revir  
    OP
       2014-10-24 14:28:06 +08:00
    @abelyao
    你的方法确实比我的实现好多了!
    谢谢~
    thanksmymagic
        8
    thanksmymagic  
       2014-12-05 12:36:32 +08:00
    @abelyao Hi~你好,我是笪兴,十年后(10years.me)的创始人。我刚刚看到你的回答和v2ex上的其他交流,感觉和我们的技术和团队风格都挺合拍 ,希望可以聊聊。十年后是一个基于梦想的社交网络,我们想用它让年轻人的生活更有未来性,网站是去年年末上线的。我们上个月刚拿到创新谷VC百万元天使轮融资,现在在招募Web前端开发的人才。可以加我的微信18101620531聊聊,交个朋友也不错:)
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2289 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 60ms UTC 00:20 PVG 08:20 LAX 16:20 JFK 19:20
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86