如何在鼠标滚轮滚动上进行水平滚动?

IT技术 javascript jquery html scroll horizontal-scrolling
2021-01-21 16:01:09

刚才,偶然地,我偶然发现了http://www.benekdesign.com/在鼠标滚轮滚动时,它执行水平滚动。老实说我不喜欢这个功能。这有点令人恼火。但是,请告诉我如何实现相同的目标。

已编辑

好的,萤火虫说他正在使用

/* Horizo​​ntal Tiny Scrolling - 水平网站的平滑滚动脚本 2(垂直“Tiny Scrolling”的兄弟)3by Marco Rosella - http://www.centralscrutinizer.it/en/design/js-php/horizo​​ntal-tiny -scrolling 4 v0.6 - 2007 年 2 月 14 日

3个回答

看起来他只是将鼠标滚轮事件映射到滚动区域。在 IE 中,这真的很容易通过使用该doScroll()方法 - 这将按垂直条通常滚动的量滚动水平条。其他浏览器不支持该doScroll()方法,因此您必须忍受任意数量的滚动:

var mouseWheelEvt = function (event) {
    if (document.body.doScroll)
        document.body.doScroll(event.wheelDelta>0?"left":"right");
    else if ((event.wheelDelta || event.detail) > 0)
        document.body.scrollLeft -= 10;
    else
        document.body.scrollLeft += 10;

    return false;
}
document.body.addEventListener("mousewheel", mouseWheelEvt);
重新编辑,这就是您应该使用库的原因。
2021-03-14 16:01:09
抱歉,我确实尝试过你的方法增加一个固定的数量,但我的 <div> 试图在我的触控板上用最轻微的两指滑动来滚动大约 2000 像素......你需要使用增量来使某些东西滚动得很好。我确切地知道 delta 是如何工作的。
2021-03-15 16:01:09
@Cobby:祝你找到一个实现跨浏览器的库onmousewheel有几个 jQuery 插件,但与这里的代码相比,它们相当大。:-)
2021-03-26 16:01:09
@Cobby:jquery.mousewheel 没有做我的示例代码所做的,所以你在做一个苹果和橘子的比较。我只是觉得这对于这项任务来说太过分了。另外,我认为您对 delta 的工作方式感到困惑,它表示每次触发事件时鼠标/触控板滚动的距离。因此,如果有的话,对于非常大的移动,此代码的滚动速度会稍慢一些。从我的一些旧代码中获取自定义滚动条后,我可以验证它是否工作得很好,尽管我想我可以稍微改进一下。你真的应该在匆忙投票答案之前做你的研究。
2021-04-01 16:01:09
jquery.mousewheel实际上相当不错,而且它几乎算不上“大”。您的解决方案没有考虑增量值。带触控板;mousewheel 事件会因为最轻微的移动而被触发大约 10 到 20 次,这意味着滚动 100 像素而不是用户期望的 10 像素。
2021-04-06 16:01:09

由于上述解决方案对我不起作用,我刚刚发现了另一个解决方案:http : //css-tricks.com/snippets/jquery/horz-scroll-with-mouse-wheel/

示例:http : //digwp.com/archives/horz/

非常感谢您花时间发表此评论@madc。真的有帮助。编辑:插件的链接对我来说已关闭,css-tricks 上的演示在 Firefox 19.0.1 中对我来说也不起作用,但您提供的示例链接确实如此,所以我只是从那里撕掉了代码。
2021-03-28 16:01:09
确实好多了!
2021-04-03 16:01:09

另一种形式:

document.addEventListener('wheel', (e) => {
    document.getElementById('scroll_container').scrollLeft += e.deltaY;
})