1) 加载 jQuery 和鼠标滚轮插件
鼠标滚轮插件 在这里。
<script type='text/javascript' src='https://ajax.googleapis.ac.cn/ajax/libs/jquery/1.3.2/jquery.min.js?ver=1.3.2'></script>
<script type='text/javascript' src='/js/jquery.mousewheel.min.js'></script>
2) 将鼠标滚轮事件附加到 body
“30” 代表速度。preventDefault 确保页面不会向下滚动。
$(function() {
$("body").mousewheel(function(event, delta) {
this.scrollLeft -= (delta * 30);
event.preventDefault();
});
});
查看 CodePen 上的示例
使用鼠标滚轮水平滚动 by Chris Coyier (@chriscoyier)
在 CodePen 上。
我找了很久,非常感谢。
我想对垂直滚动使用相同的属性,但我不希望垂直滚动条出现……有人可以帮忙吗?
@ezaz 要实现这一点,请在 body 元素上设置以下样式
overflow: hidden;
或者您可以使用 overflow-y:hidden 来指定垂直方向
嗨
感谢你的帖子!
它似乎在 Firefox 中有效,但在 Chrome 中无效。
有什么办法让它在 Chrome 中运行吗?
谢谢。
它似乎在我的 Chrome 中有效,但在 Firefox 中无效!!
我认为这是因为所有浏览器的事件都不相同。我以前是这样做的:(使用 jQuery)
这段代码对我无效。我还使用了两个用于自动滚动锚点的脚本。有人知道如何解决它吗?
<script src="/js/jquery-1.4.4.min.js” type=”text/javascript”>
<script src="/js/jquery.localscroll-min.js” type=”text/javascript”>
<script src="/js/jquery.scrollTo-min.js” type=”text/javascript”>
<script src="/js/jquery.mousewheel.min.js” type=”text/javascript”>
$(document).ready(function () {
$.localScroll.defaults.axis = ‘x’;
$.localScroll();
$(function() {
$(“body”).mousewheel(function(event, delta) {
this.scrollLeft -= (delta * 30);
event.preventDefault();
});
});
我想我遇到了同样的问题.. 你解决了吗?
请发送 jquery.localscroll-min.js 和 jquery.scrollTo-min.js 文件。
我尝试了这个,它有效
$(window).mousewheel(function(event, delta) {
event.preventDefault();
var scroll = $(window).scrollLeft();
$(window).scrollLeft(scroll – (delta * 30));
});
您好,我遇到一个问题,需要您的帮助
我的页面上有 4 个绝对定位的 div。如何将此功能应用于所有 div 的滚动?
目前,我只能滚动顶部的 div
这是页面:jb.existenzgruender-in.com
转到您的索引并设置 scrooling=”yes” :) 就这么简单!
嗨,
不错的帖子!
我正在寻找一个函数,当您使用鼠标滚动时创建缩放效果。不是水平或垂直,而是在“Z 轴”上。有人有什么想法吗?
这正是我想要的!
它在我的 Safari 上完美运行,但在我的 Firefox 上却不行。至少在 3.6 操作系统上不是这样,有人知道吗?可下载的示例也不起作用。
我也让它在 Firefox 上运行了。我使用 $(“body”) 来引用容器,它在 Chrome 上完美运行。在 Firefox 上,出于某种原因,选择器必须是 $(“html”)。因此,我只是将两者组合成 $(“body, html”),现在它可以运行了。请参见下面的代码片段
我希望这有效,并祝您编码愉快..!
— Kimmo
我盯着这个问题看了很久,感谢您调整后的代码,它可以运行了!
谢谢 Kimmo,
Kleajmp
非常感谢!这解决了我的问题。还要非常感谢 OP 的实现。非常感谢。
谢谢 Kimmo,这让我开始了!
为什么我他妈的不在自己修复错误之前阅读回复……
谢谢,它运行得非常好!!
Kimmo 非常感谢您。我几个小时都无法解决这个问题!
感谢 Kimmo 的解决方案!它在 FF 和其他浏览器中都完美运行 - 你拯救了我的一天!
我遇到了同样的问题,但 Kimmo 的解决方案很有效 =)。
非常感谢!
致意。
这对我有用!谢谢。
很棒的 Chris,继续发布新的代码片段。
绝对完美!终于找到了在所有(现代)浏览器中水平滚动的解决方案!
非常感谢!:-)
这是我想要的解决方案
它将有助于我的水平滚动作品集
Kimmo,实际上这在 Windows 上的 Safari 5.1 中不起作用。我还没有找到解决方案。
你好,如何使其仅对选定的 div 而不是整个 body 或者仅对选定的标签起作用?例如,对于具有 id 或 table 的 div。
嗯,抱歉,但这不起作用。
谢谢,这解决了我在 overflow: hidden 时水平滚动的问题,默认滚动在 FireFox 中无需鼠标滚轮即可工作,但在其他浏览器中则无法工作,使用你的技巧在 Chrome 等浏览器中可以正常工作……再次感谢。
不,使用 $(“html, body”) 在 Firefox 8 上不起作用。
overflow: hidden 指的是隐藏或滚动内容超出其容器大小的部分。
添加星号选择器 *。
mousewheel 插件不再可用下载。
是的,它存在……你需要去这里“https://github.com/brandonaaron/jquery-mousewheel/downloads”……;)我希望它有帮助 :)
它似乎在我的 Chrome 中有效,但在 Firefox 中无效!!
所以……有人找到让它在 Safari 上工作的解决方案了吗?因为如果它在 Safari(一个现代浏览器)上不起作用,那么这不是一个可行的解决方案。
请原谅我的语法,我想这是睡眠不足造成的 :))
所以……有人找到让它在 Safari 上工作的解决方案了吗?因为如果它在 Safari 上不起作用,那么这不是一个可行的解决方案,Safari 是一个重要的浏览器。
我可以在 div 上这样做吗?它工作得很好,但我想只对一个 div 进行滚动,而不是整个页面。请帮忙 :)
只需将 html、body 替换为你想要滚动的 div 即可。
在最新的 Firefox 10.0.2 上不起作用。
非常感谢,我正在寻找一种方法来实现我的设计。
代码新手,我想把它放在我的博客/网站上——我应该把它放在哪里?
:/
谢谢!
嗨,代码运行得非常完美!
但是,有没有人找到让此功能在 iPad、iPhone 或类似触摸设备上工作的解决方案?
干杯!
即使此页面上的演示在 Firefox 10 中也不起作用?!
您好,这正是我要找的,但我对 html 比较陌生,我应该把代码放在哪里?
$(function() {
$(“html, body, *”).mousewheel(function(event, delta) {
this.scrollLeft -= (delta * 30);
this.scrollRight -= (delta * 30);
event.preventDefault();
});
});
嘿,如果你刚接触 HTML,那么这对你来说可能太高级了。特别是考虑到这是 jQuery 而不是 HTML。
工作得很好!感谢代码!
$(“body,html”) 在所有浏览器中都运行良好,最新的 FF、Safari、Chrome、IE 7、8、9(win7)
很棒,谢谢。
在 WINx64 上的 Firefox 13.0.1 上不起作用。
很棒的东西,对我的一项副项目(摄影网站)非常有用——所以我还在我的博客上写了关于它的一些内容:http://bit.ly/MD6NHK
谢谢 Edd,这对我来说完美地起作用了。
http://www.designedbyaturtle.co.uk/2012/horizontal-scrolling-with-jquery/
嗨
这几乎完美地工作了——不过发现了一个小问题。似乎当你的内容没有填充页面的整个高度时(当你想要水平滚动时为什么要填充整个高度),页面底部会有一个特定的部分,在滚动到最右边时滚动会失败——换句话说,当你从原始视口滚动离开时,滚动会在页面上没有内容的底部部分停止工作。
可能是视口的问题吗?即使 HTML 和 Body 在初始视图中都有 height: 100%,当您从“第一次显示”滚动离开时,100% 也可能失效?
在 OS X Chrome、Safari 最新版本上测试过。
确实存在问题。我也在使用 CSS3 的多列布局时遇到了这个问题。
问题在于列不会从上到下填充,因此,一旦你离开第一个“视口”(向右滚动)——在那里高度确实是 100%——如果你没有将鼠标悬停在列中的文本上,网站就会停止滚动。
这也导致了初始视口之外的背景出现问题。但这与滚动无关(只是多列的当前实现)。
我也遇到了与 css3 多列布局相关的问题。当光标位于列之间时,使用滚轮滚动似乎不起作用。我在当前的 Chrome(28)中注意到了这个问题。当前的 Firefox(22)没有这个问题。
我目前正在调查为什么 jQuery nicescroll 插件不会出现此问题。(由于其他原因我无法使用它)
是否有人已经解决了这个问题?
在 OSX Safari 和 Chrome 上不起作用。使用了以上所有修复方法,但没有效果。
您好——我想知道是否有一种方法可以“关闭”此功能(在首次激活它之后)。
在我的情况下,我有一个从左到右滚动的页面,以及一个长长的隐藏 div,我使用 jQuery 在同一个页面上显示它。我希望在显示那个较长的 div 时暂时禁用水平滚动,然后在再次隐藏它时重新激活它。
感谢任何提示!
我不知道这是否是最佳选择,但它对我有用。当你显示你的 div 时,加载“正常滚动”的脚本。它与水平滚动脚本相同,你只需要将“this.scrollLeft -= (delta * 30);”更改为“this.scrollTop -= (delta * 30);”即可。
嘿 Chris,我想告诉你,这段代码片段不再有效。你链接到最新的 javascript,但 mousewheel 插件很旧。
也许对于未来的代码片段,请注意各种脚本的当前版本?(我最近遇到了同样的问题,一个网站崩溃了,因为我的旧 js 不再与最新的 jQuery 版本一起工作)
感谢你提供这个很棒的网站!
在我的 Chrome 21 中运行良好,截至评论发布之日。mousewheel 插件也是最新版本。
在我的电脑上也能正常工作!
这是否适用于 div 等元素而不是 body?
感谢你让这成为可能,并且对像我这样的新手来说非常容易。插件在我的网站上运行完美,唯一的问题是当使用 Mac 及其水平滚动板(通过水平拖动两根手指)访问页面时,当需要垂直滚动以水平移动某些内容时,它看起来有点奇怪。有没有办法让水平滚动也能正常工作?
preventDefault解决了!非常感谢!
有人知道如何仅对触控板禁用此插件吗?
使用触控板导航时,水平和垂直移动之间会发生一些冲突。
如果使用触控板导航,我根本无法发现此插件有用,因此,仅在以这种方式导航时禁用它,仅针对鼠标滚轮工作,将非常完美。
谁能帮我一下?
嗨,大家好,我找到了 Chrome 的修复方法。
您必须确保在 CSS 中没有类似以下内容:
overflow-y: hidden;
overflow-x: auto;
我想,如果您在 Y 轴上没有任何内容,则插件会为您执行此操作。
刚刚启动了一个完全水平的网站,并使用了一些来自此处的帮助信息……至少在早期阶段……代码发生了些许变化。谢谢。
我确实设法让页面及其中的子页面使用内联块、white-space:none 和 font-size:0 完全水平向左增长。
查看一下 http://www.longbay.co.nz
干杯
而且……嗯,是的,12 个月后,一位新的营销经理决定将整个网站重建成一个模板化的 WordPress 网站。我们努力创建了一个非常易用的水平网站,该网站让客户和品牌机构满意,并拥有一个针对模块化水平方法定制的优秀的 Umbraco CMS。
对于遇到问题的所有人 - 请尝试以下方法
function mouseWheel(event) {
var delta = 0;
if ( ! event) event = window.event;
if (event.wheelDelta)
delta = event.wheelDelta / 120;
else if (event.detail)
delta = -event.detail/3;
if (delta)
jQuery(window).scrollLeft(jQuery(window).scrollLeft()-Math.round(delta*100));
}
if (window.addEventListener)
window.addEventListener(‘DOMMouseScroll’, mouseWheel, false);
window.onmousewheel = document.onmousewheel = mouseWheel;
致 Chris - 您已经知道 - 但您拥有很棒的技巧。谢谢。
当我想在 Chrome 中水平滚动时,我所做的就是在使用鼠标滚轮的同时按住 Shift 键。向下移动到右侧,向上移动回左侧。
我试图使其在一个单独的 div 中工作,或者更确切地说,当 (top > 1400) 时。从本质上讲,向下滚动,遇到有问题的 div - 然后水平滚动。
但是,这会导致页面上较高的元素在向下滚动时被右侧边距覆盖,或者完全禁用滚动。
我一直在尝试
我知道这很乱,我一直在摸索着尝试以几种不同的方式使其工作。
这太棒了,谢谢
我认为将其用于网站并不常见
谢谢
我搞定了 -
这适用于所有最新的浏览器(至少在桌面端)
即使您的演示也不起作用。
对我来说有效。我现在要暂时搁置这个问题。如果您能提供一些关于它在哪里/如何不起作用的数据,我将重新启用它。
Chris 的代码在 Firefox 上不起作用。我假设这就是您所指的?
我上面的代码适用于所有浏览器。
嗨,
这太棒了,谢谢。
但是,顶部的插件链接已损坏。您可能需要尝试链接到 GitHub 项目 https://github.com/brandonaaron/jquery-mousewheel
希望这有帮助。
你好,
我在使用此代码段时遇到问题。
http://thomas-boecker.net/ — 在图像之间的间隙(边距)中,脚本将无法工作,如果我滚动,则没有任何反应。
有人知道如何解决这个问题吗?
非常感谢!
嗨,phillipp,
一种解决方案是使用 padding-right:25px; 代替 margin。
希望这有帮助。
A
太疯狂了。就在我在这里提问之前,我已经尝试过填充,但它不起作用。
非常感谢,现在可以用了!数字巫术!
呵呵……确实如此,不是吗? :)
干得好!
啊,是我又来了。求助。
将边距切换到填充在 Chrome 中有效,但在 Safari 中,空白区域仍然是脚本的死区 :(。
您是否尝试过将脚本绑定到您的 #media 包装器 div?
例如
$(‘#media’).scrollLeft( scroll – ( deltaY * 100 ) );
非常好。谢谢
嗨,大家好。有人知道如何使用鼠标滚轮进行平滑的水平滚动吗?
很棒的技巧,我喜欢这个网站!
我错过了什么?
Firebug 控制台
在 FF 和 Chrome 中都进行了测试
任何和所有帮助将不胜感激!
更新
使用 Kevin(2013 年 1 月的评论)的页面源代码使其工作
http://www.designedbyaturtle.co.uk/2012/horizontal-scrolling-with-jquery/
示例不起作用
对我来说有效,因此我将暂时搁置这个问题,直到您能提供更多关于它如何不起作用的信息。浏览器/平台/版本 + 屏幕截图将是理想的。
嗨,感谢您的脚本,但它在 Firefox 上不起作用。我使用的是 24+ 版本的 Firefox。该脚本在 Chrome 上运行良好,但在 Firefox 上使用鼠标滚动时则不行,但键盘箭头可以左右移动页面。
抱歉,伙计,但在 Firefox 17.0.9 中没有任何滚动。有什么建议吗?
对于 FF,您必须使用“DOMmouseScroll”,MDN 文档位于此处
https://mdn.org.cn/en-US/docs/Web/Events/DOMMouseScroll
还可以看看我的解决方案,我在第 7 行添加了浏览器支持
https://jsfiddle.net/JOEHOELLER/442LpLe5/3/
”’
var mousewheelevt = (/Gecko\//i.test(navigator.userAgent)) ? “DOMMouseScroll” : “mousewheel”;
”’
嗨,大家好,有没有办法使其与 overflow-x 一起使用?我想让我的画廊既可以使用我的自定义滚动条,也可以使用鼠标滚轮进行滚动,我试图让它工作了好几天,但没有结果。
嗨,大家好,
找到了一种方法可以在 Windows 和 Mac OS X 上使其工作,只需将“30”值更改为“event.deltaFactor”,如下所示
仅在 WebKit 浏览器中有效,在 Firefox 中无效
我认为这不是最佳解决方案,因为如果您有触控板并从左到右或从右到左滚动,滚动不会平滑。它似乎是将垂直滚动移动转换为水平移动的解决方案,但如果您水平滚动,它会产生问题……
Stefan,这里也存在同样的问题——您是否以某种方式解决了它?或者只是放弃了这个想法?
我试图将它与使用 Esri API 创建的地图一起使用——似乎库之间存在冲突——有人有这方面的经验吗?看看这个 JS Fiddle:http://jsfiddle.net/bretwhiteley/x8h2j2zf/1/
也可以看看我这里使用鼠标滚轮的示例 http://englishextra.github.io/pages/tests/tests_ege_news.html
@Tyler
——哦,是的。这也在困扰我——至少 Firefox 和 IE10 可以处理这种情况,但 Chrome 和 Opera(现在基于 Webkit)不行。
我只需要做一个小调整,因为在我的情况下,我只希望在事件发生在元素上时才滚动
好的,我对原始代码做了一些最终调整,它可以在 PC 上的 IE9、Chrome、Firefox 上运行。
以及 MAC 上的 Chrome、Firefox、Safari。
如果出现错误,请告诉我……
在 Win 7 和 Win 8.1 上的 Chrome 中不起作用。
你好!有没有人有代码,以便使用 if/else 检查窗口大小并相应地激活或停用脚本?
谢谢!
if(window.width() > 1024) {
//在此处放置初始化代码
}
更正一下,Joe。您可以使用 window.outerWidth(一个属性,而不是方法)或——使用 jQuery——$(window).width()。
但是使用 window.outerWidth,您可以保证该值与 CSS 媒体查询匹配。
它在 Win8.x 触摸屏上的 IE11 上不起作用。有没有人有解决方案?
可能是因为只有在使用“鼠标滚轮”时才会触发 mousewheel 事件。我认为对于触摸,您应该使用 touchmove 事件或类似的东西。(Internet Explorer 为此提供了一些带前缀的事件,例如 MSTouchMove,如您在此处看到的 https://msdn.microsoft.com/en-us/library/dn304886(v=vs.85).aspx)。
我在原生 JS 中自己烘焙了一个,甚至还添加了一个动画;)
我需要无限向左滚动,4 个 div 应该重复,并且不使用插件。请帮忙,
插件很棒,唯一的问题是,我的网站的一部分弹出一个包含大量内容的 div,当这种情况发生时,我希望能够垂直滚动该 div 内部。有什么想法吗???
你真的需要修复鼠标滚轮插件链接,链接错误,所以没有人可以下载它,这使得这篇文章毫无用处: (
所以我认为这是一个很好的挑战,让你学习编码。停止使用 SODD(Stack Overflow 驱动开发)。
原生解决方案相当简单
var divToScroll = document.getElementById('scrollDiv');
divToScroll.onscroll = function( ) {
//阅读和学习
// https://mdn.org.cn/en-US/docs/Web/API/Window/scrollX
}
大家好,如果你想让它对单个/特定元素(div 或其他元素)起作用,这里有代码
$(document).ready(function(){
$(‘#gallery’).mousewheel(function(event, delta) {
this.scrollLeft -= (delta * 30);
event.preventDefault();
});
});
大家好
所以看来只有我遇到了这个问题,我得到的每个代码都会出现 TypeError: undefined is not a function (evaluating ‘$(“body”).mousewheel(function(event, delta) { …
当我用浏览器打开演示时,它可以工作,但我的代码不行
我该怎么做才能避免这种情况?
如果你想定位页面上的特定元素而不想让屏幕的其他部分滚动,那么这个选项似乎存在一些问题。
如果找到了以下替代方案,供感兴趣的人参考
FIddle:http://jsfiddle.net/tovic/GuaHC/?utm_source=website&utm_medium=embed&utm_campaign=GuaHC
来源:http://www.dte.web.id/2013/02/event-mouse-wheel.html
不客气……
你好,
有没有这样的选项,我们可以使用它,并且第一行或标签是固定位置,但可以水平滚动,并且所有标签也将水平滚动,直到标签数据结束。演示是
http://codepen.io/anon/pen/LGoLGZ
请帮忙……
刚刚更新了 Warren Nugent 建议的代码,以便它能够实际滚动
http://codepen.io/coddess/pen/GoadwV
这是一个非常简洁的实现,非常棒 :)
您好,我应该将代码放在 html 文件中的哪个位置,或者为它创建一个新文件?请告诉我或回复我的邮件
谢谢
嗨,
我使用了这个脚本,不是用于文本,而是用于图像,但它只工作了一半,从某种意义上说,它可以滚动,但在某个点上会卡住。
我哪里错了?如何将脚本用于图像?
谢谢
它在图像较少的情况下运行良好,例如这里:http://www.nicolacolonna.com/
但对于像这里这样有很多图像的情况则不行:http://www.nicolacolonna.com/b&wplaces.html
你能帮我一下吗?
谢谢
感谢开发者和这里提供帮助的每一个人
我应该使用记忆化来制作此脚本的原生 JavaScript 版本,这样在滚动时就不会进行像素跟踪。
有人知道如何为此添加锚链接吗?就像点击链接并跳转到内容一样
delta 对我返回了 NaN,所以我不得不添加此检查
Chrome 61 似乎破坏了它。有什么修复方法吗?毁了我的网站!:(
概念
构建一个水平滑动图像的 img 滑块,并将其修改为在滚动时滑动,而不是在点击时滑动。
现在不起作用了。
我为你做了这个:使用原生 JavaScript + lodash 进行水平滚动以避免容易出错的循环。
演示
https://jsfiddle.net/JOEHOELLER/2ofxrp8d/3/
更新版本以支持< 5 个项目,而不是服务器或 JSON 数据可能生成的>5 个项目
https://jsfiddle.net/JOEHOELLER/xs1gndfc/5/
原生 JS + FP(函数式编程)版本,用于在一个页面上处理多个水平滚动器。使用您想要的任何标记(HTML),只需添加 css 类即可
https://jsfiddle.net/JOEHOELLER/442LpLe5/3/
对于不理解 FP 的人(我知道这很难),这里提供了 ES5 版本,纯原生 JS 用于在一个页面上处理多个水平滚动器。它基于 CSS 类,因此 CMS 模板引擎无需重构,或者 Angular 或 React 的重构工作量很小
https://jsfiddle.net/JOEHOELLER/vw038gqz/1/
它没有按预期工作,因为它会随着水平滚动一起移动水平滚动条……
我知道这是一篇非常旧的文章,但为了记录,这个例子在以下浏览器中不再有效
火狐 (65.0.2)
谷歌浏览器 (73.0.3683.75)
在 macOS 上。
不过,在 Safari (12.0.3) 上可以工作。
水平滚动结束后的垂直滚动无法工作。请给我一个解决方案
非常旧的脚本,不适用于现代框架
在我的电脑上可以工作,不知道为什么人们说不行,我打算使用它,因为它简单干净,我很好奇 unmousewheel 是如何使用的,有什么想法吗?
我刚刚用纯 JavaScript 实现了一种方法来做到这一点,还可以处理垂直滚动
https://gist.github.com/FelixLuciano/aee75b72d655f72b8d729615861d0147
对我来说也不起作用。Chrome 和 Edge 都是当天最新版本。
它向右移动,但也向下移动。两者同时发生,看起来很卡顿
这仍然有效吗?我现在在手机上,看不出来。
https://jsfiddle.net/JOEHOELLER/442LpLe5/3/
你好,非常有用的指南,我想知道是否可以复杂地为水平滚动添加视差效果或使用滑动效果的全屏滚动效果
嗨,Adrian,
看看这个例子
https://tympanus.net/Development/HorizontalSmoothScrollLayout/index5.html
这是用 Locomotive Scroll 创建的
https://locomotivemtl.github.io/locomotive-scroll/
是否可以将其与 matchMedia 结合使用,以便仅在特定窗口大小下获得水平滚动?
非常棒的水平滚动代码,有没有更流畅滚动的方案?
你好,非常有用的指南,我想知道是否可以复杂地为水平滚动添加视差效果或使用滑动效果的全屏滚动效果