【问题标题】:How to make an element scroll when scrolling body滚动正文时如何使元素滚动
【发布时间】:2014-04-27 09:05:57
【问题描述】:

当鼠标滚轮在页面主体上滚动时,可以捕获此事件。我希望这个事件触发目标元素滚动。

#target 是一个可滚动的元素,它永远不会是页面的高度。我想在页面上的任何位置捕获 mousescroll 事件,因此即使光标不在元素上方,元素仍会滚动。

$( 'body' ).on( 'DOMMouseScroll mousewheel', function () {
    // Scroll #target instead of body    
});

感谢这篇文章向我展示了如何捕获滚轮事件:Capturing Scroll Wheel Events

【问题讨论】:

标签: javascript jquery scroll user-experience


【解决方案1】:

你可以看看这个。

http://jsfiddle.net/ZtGva/7/

JS

$(function () {
    var myCounter = 0,
        myOtherCounter = 0;
    var scroll = 0;

    $("#target").scroll(function () {
        myCounter = myCounter + 1;
        $("#log").html("<div>Handler for .scroll() called " + myCounter + " times.</div>");
    });

    //Firefox
    // $(document).bind(...) this works as well
    $('#body').bind('DOMMouseScroll', function (e) {
        if (e.originalEvent.detail > 0) {
            scrollDown();
        } else {
            scrollUp();
        }

        //prevent page fom scrolling
        return false;
    });

    //IE, Opera, Safari
    $('#body').bind('mousewheel', function (e) {
        if (e.originalEvent.wheelDelta < 0) {
            scrollDown();
        } else {
            scrollUp();
        }
        //prevent page fom scrolling
        return false;
    });

    function scrollDown() {
        //scroll down
        console.log('Down ' + scroll);
        if (scroll < $('#target').find('div').height() - $('#target').height() + 20) {
            scroll = $('#target').scrollTop() + 5;
            $('#target').scrollTop(scroll);
        }
    };

    function scrollUp() {
        //scroll up
        console.log('Up ' + scroll);
        if (scroll > 0) {
            scroll = $('#target').scrollTop() - 5;
            $('#target').scrollTop(scroll);
        }
    };
});

注意我添加了一个 div 用于高度计算

<div id="target"><div>.... </div></div>

您可以通过缓存一些 jquery 变量来稍微清理一下这段代码,但想法就在那里

【讨论】:

  • 这很棒。我永远不会知道要测试 e.originalEvent.detail,而且发现 e.originalEvent.wheelDelta 的机会更小。当你知道怎么做时很容易,但当你不知道时,是否有一个特定的地方可以找到?特定的书籍或在线参考资料,还是仅仅通过在论坛上提问来学习?
  • 我刚刚用谷歌搜索并发现了关于 stackoverflow 上的滚动
  • 这太棒了!您将如何为平板电脑/智能手机设备修改它?所以不是鼠标滚轮监听器,而是触摸滚动监听器?
  • @Kyle 对于触摸设备,您可以使用 jquery 绑定滚动,关于这个问题的棘手部分是鼠标滚轮。检测正常滚动很容易api.jquery.com/scroll将滚动绑定到窗口,您可以在页面滚动时做一些事情
  • 该方法是什么样的?我尝试绑定滚动而不是鼠标滚轮,但我的页面仍然是静态的。我想我不确定从 e 调用什么方法。我通过搜索 stackoverflow 创建了另一种方法,但页面保持不变(鼠标滚轮是唯一对我有用的东西)。 var lastScrollTop = 0; jQuery(window).bind('scroll', function (e) { var st = jQuery(window).scrollTop(); if (st > lastScrollTop){ scrollDown(); } else { scrollUp(); } lastScrollTop = st ; 返回 false; });
猜你喜欢
  • 2021-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-22
  • 1970-01-01
  • 2017-07-18
  • 2011-11-27
  • 1970-01-01
相关资源
最近更新 更多