Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 鼠标滚轮上的水平滚动_Javascript_Jquery_Mousewheel_Smooth Scrolling - Fatal编程技术网

Javascript 鼠标滚轮上的水平滚动

Javascript 鼠标滚轮上的水平滚动,javascript,jquery,mousewheel,smooth-scrolling,Javascript,Jquery,Mousewheel,Smooth Scrolling,在哪里可以不按住shift键,通过鼠标滚轮水平滚动div 我知道鼠标滚轮插件的方法: $("#test").mousewheel(function(event, delta) { var current = $(this).scrollLeft(); $(this).scrollLeft(current - (delta * 80)); }); 我试着用$(这个)滚动它。动画…,但它看起来还是很难看 我不需要在滚动时模拟浏览器内置的平滑度,因为它不是跨浏览器的方式,我需要自然滚动

在哪里可以不按住shift键,通过鼠标滚轮水平滚动div

我知道鼠标滚轮插件的方法:

$("#test").mousewheel(function(event, delta) {
   var current = $(this).scrollLeft();
   $(this).scrollLeft(current - (delta * 80));
});
我试着用
$(这个)滚动它。动画…
,但它看起来还是很难看

我不需要在滚动时模拟浏览器内置的平滑度,因为它不是跨浏览器的方式,我需要自然滚动


也许可以在
鼠标指针
事件上模拟按住shift键?

诀窍是检索表单。。。然后使用jQuery

因为增量总是
33.33333 206176758
-33.33333 206176758
。。。您可以用
33
进行和除。然后,您将始终获得
1
-1
,您可以将其乘以希望在X轴上每个轮子旋转时滚动的像素量

//用于存储当前X滚动位置的变量。
无功电流=0;
//每个轮子旋转时所需的像素增量。
var ScrollX_pixelPer=40;
//事件处理程序。
$(“#测试”)。在(“鼠标滚轮”上,函数(e){
e、 预防默认值();
//获取deltaY(始终为+/-33.33333 206176758)并乘以所需的像素增量。
var delta=ScrollX_pixelPer*(parseInt(e.originalEvent.deltaY)/33);
//递增/递减电流。
电流+=增量;
//console.log(当前);
//申请新职位。
$(此)。向左滚动(当前);
});
#测试{
高度:2.5em;
溢出y:滚动;
空白:nowrap;
}
.垫片{
高度:400px;
}

我的同僚坐在我身边,没有我。圣殿医生,不,我是上诉人。在任何情况下,都应使用临时性材料。不需要任何精彩的表演,也不需要任何激烈的辩论。Nihil假定的invenire ea vix。我是一个爱哭的人,我是一个爱哭的人。为mea配给法贝拉公社,为感官照明。

我知道有点晚了,但我自己也在寻找答案,在玩Louys的代码时,我发现了一些似乎更好用的东西

$(“测试”)。在(“鼠标滚轮”上,函数(e){
e、 预防默认值();
var delta=40*(parseInt(e.originalEvent.deltaY)/33);
var scto=$(this).scrollLeft()-delta;
$(此).scrollLeft(scto);

});好吧,我最近一直在努力实现这一功能,我发现只要mousewheel事件似乎不再受支持,那么使用当前浏览器的最佳解决方案可能是:

    $(window).on('wheel', function(e){
    if ($.browser.mozilla) {
        e.preventDefault();
        var delta = -500*(parseInt(e.originalEvent.deltaY)/33);
        var scto = $(this).scrollLeft() - delta;
        $(this).scrollLeft(scto);}
    else{
        e.preventDefault();
        var delta = -50*(parseInt(e.originalEvent.deltaY)/33);
        var scto = $(this).scrollLeft() - delta;
        $(this).scrollLeft(scto);}
});`

劳伊斯,谢谢你的回答。平滑呢?为什么要将当前变量移到事件之外,而不将其设置为$(this).scrollLeft()?
current
变量保持滚动的位置。如果在事件处理程序中声明它,它的值将在每个轮子旋转时重置。它必须在外部以保持每次旋转之间的值。关于“窒息”。。您可以尝试使用
.animate()
,但由于它意味着延迟,因此您还需要使用
.setTimeout
重置计时器以“缓冲”旋转(因为它触发频率太高),并在用户完成旋转时应用最后一个值。但是我认为这样做不好。我尝试了你的代码,我注意到在
console.log(current)
中,当你仍然滚动时,这个“current x”值将增加/减少,即使没有更多的内容可以滚动。有什么方法可以识别内容的边缘/结尾吗?我添加了一个条件,
current
不能小于0,并计算了内容的内容宽度,所以不用担心。对于我自己的项目,我觉得向上滚动基本上应该向右滚动,但如果你想更改它,只需添加增量而不是减去它(因此,var scto=$(this).scrollLeft()+delta;)