如何使用鼠标滚轮滚动线性动画 div?

纳伦·维尔玛

我能够从右侧向左侧滚动 div,但在滚动鼠标滚轮时我必须线性显示 div。当前代码未显示 liner 。我的意思是我必须从右到左平滑地显示。

你会帮我解决这个问题吗?

(function() {
    function scrollHorizontally(e) {
        e = window.event || e;
        var delta = Math.max(-1, Math.min(1, (e.wheelDelta || -e.detail)));
        document.getElementById('gentags').scrollLeft -= (delta*40); // Multiplied by 40
        e.preventDefault();
    }
    if (document.getElementById('gentags').addEventListener) {
        // IE9, Chrome, Safari, Opera
        document.getElementById('gentags').addEventListener("mousewheel", scrollHorizontally, false);
        // Firefox
        document.getElementById('gentags').addEventListener("DOMMouseScroll", scrollHorizontally, false);
    } else {
        // IE 6/7/8
        document.getElementById('gentags').attachEvent("onmousewheel", scrollHorizontally);
    }
})();
#gentags {
position:relative;
margin-top: -.25em;
display: inline-block;
width: 100%;
overflow-x: scroll;
overflow-y: hidden;
}

#gentags > div{
    overflow: hidden;
    width:200%;
}

::-webkit-scrollbar {
    width: 0px;  /* remove scrollbar space */
    background: transparent;  /* optional: just make scrollbar invisible */
}
/* optional: show position indicator in red */
::-webkit-scrollbar-thumb {
    background: transparent;
}

.horizontal_scroll .full_screen_100 article{
    width: 12.58%;
    height: 100%;
    float:left;
    border-left: solid 1px #E2E2E2;

}
<div id="gentags">
   <div class="horizontal_scroll">
		<div class="full_screen_100" id="left_scroll">
			<article><div><p class="scroll_number">01</p><span class="page_slogan">Lorem ipsum dolor sit amet, </span></div></article>
			<article><div><p class="scroll_number">02</p><span class="page_slogan">Lorem ipsum dolor sit amet, </span></div></article>
			<article><div><p class="scroll_number">03</p><span class="page_slogan">Lorem ipsum dolor sit amet, </span></div></article>
			<article><div><p class="scroll_number">04</p><span class="page_slogan">Lorem ipsum dolor sit amet, </span></div></article>
			<article><div><p class="scroll_number">05</p><span class="page_slogan">Lorem ipsum dolor sit amet, </span></div></article>
			<article><div><p class="scroll_number">06</p><span class="page_slogan">Lorem ipsum dolor sit amet, </span></div></article>
	 </div>
    </div>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>

轮酒

(此答案已完全重写)

我检查了你的 JSFiddle 代码并找到了原因,为什么它总是以相同的速度滚动。您的新滚动位置始终为currentPosition + wheeldelta但这会导致滚动速度恒定。

解决方案(如上一个答案):计算当前滚动动画的 END 并随着每次轮子旋转增加它。意思是:您需要一个用于虚拟(=动画结束时)页面滚动位置 (xScroll) 的全局计数器。它被初始化为 0 并在每次触发轮事件时增加一个速度值。然后你滚动到这个新的 xScroll。

但是仍然存在一些问题:
1. 用户可以进一步滚动(因此更改 xScroll),即使滚动条已到达内容的左侧或右侧。如果用户现在向另一个方向滚动,xScroll 仍然太大(或太小),从而导致可见动画的启动延迟。为了避免这些过冲,我为 xScroll 引入了限制——实际上是零(完全左侧)和可滚​​动内容的宽度(完全右侧)。2、每个浏览器为鼠标旋转一圈提供了不同的delta,导致在使用deltaY计算新的xScroll时速度差异很大。为了解决这个问题,我们只确定旋转方向(delta > 或 < 0)并否定或不否定自我选择的速度值(在我的情况下为 120)。现在,每当轮子转动时,
3. 目前,我们只监听滚轮事件并在每次滚轮旋转时更新我们的 xScroll。但是如果用户通过滚动条滚动然后再次切换到鼠标滚轮,xScroll 的值是错误的,因为滚轮事件不是由滚动条触发的。这导致滚动位置来回跳跃。但是我们不能在每次触发滚动事件时简单地将 xScroll 更新到当前滚动位置,因为那样平滑的动画会突然停止(因为它们的结束 xScroll 现在被设置为当前滚动位置)。解决方案很脏,但有效:全局标志ignore,如果当前滚动事件的调用是由鼠标滚轮启动的,则为 true,否则为 false(-> 由滚动条启动)。如果 ignore 为 false,则 xScroll 在每个 scoll 事件上更新,否则不会。

这听起来很复杂,对我来说也很脏,但它适用于最新的浏览器。

即使用户通过滚动条滚动,我也无法实现平滑滚动。但我认为,这并不是真正必要的。实际上,我认为这种水平滚动提供了非常糟糕的用户体验(在手机上会发生什么?),但是,嘿,这不是问题。

你原来的小提琴:jsfiddle.net/3s5su2q3/6/

我的解决方案:jsfiddle.net/3s5su2q3/14/

PS:您的事件侦听器已被弃用。在我的解决方案中,我使用了新标准(兼容性:https : //developer.mozilla.org/en-US/docs/Web/API/WheelEvent)。不过,请随意添加对旧浏览器的支持。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用鼠标滚轮在div上滚动div

来自分类Dev

如何通过鼠标滚轮水平滚动div,锁定身体滚动?

来自分类Dev

在不可滚动的Div内捕获鼠标滚轮滚动

来自分类Dev

使用鼠标滚轮滚动时Chrome闪烁,将div重新定位到$(document).scrollTop()

来自分类Dev

如何使用线性渐变效果在div中水平滚动?

来自分类Dev

使用 Angular 4/6 动画在鼠标悬停时滚动 div

来自分类Dev

如何使仅在鼠标位置div上滚动?

来自分类Dev

滚动到鼠标滚轮jQuery上的下一个div

来自分类Dev

使用按钮和鼠标滚动DIV

来自分类Dev

如何在SWT中使用鼠标滚轮滚动滚动的合成

来自分类Dev

如何使用鼠标滚动在其他div后面显示div

来自分类Dev

使用动画div自动滚动网页

来自分类Dev

jQuery使用动画平滑滚动到div

来自分类Dev

鼠标滚轮在Div内无法工作

来自分类Dev

如何在鼠标上下滚动时使div水平滚动

来自分类Dev

在另一个div上使用滚轮的同时滚动一个div

来自分类Dev

在另一个div上使用滚轮的同时滚动一个div

来自分类Dev

使用鼠标滚轮和鼠标向上控制页面滚动动画

来自分类Dev

如何使用鼠标滚轮在scrollviewer中滚动列表框

来自分类Dev

如何使用键盘通过AutoHotkey模拟鼠标滚轮滚动?

来自分类Dev

如何在 angular 上使用鼠标滚轮滚动到项目

来自分类Dev

如何使用动画缩小div?

来自分类Dev

使div上的div动画并延迟鼠标离开

来自分类Dev

如何使用puppeteer在弹出窗口中模仿div内的鼠标滚动?

来自分类Dev

如何限制滚动到鼠标当前悬停的div?

来自分类Dev

当鼠标在jQuery中按下时,如何滚动div?

来自分类Dev

如何获得鼠标滚轮的垂直滚动速率

来自分类Dev

如何让鼠标滚轮在zsh上滚动屏幕?

来自分类Dev

在TeeChart中使用鼠标滚轮滚动图表

Related 相关文章

  1. 1

    使用鼠标滚轮在div上滚动div

  2. 2

    如何通过鼠标滚轮水平滚动div,锁定身体滚动?

  3. 3

    在不可滚动的Div内捕获鼠标滚轮滚动

  4. 4

    使用鼠标滚轮滚动时Chrome闪烁,将div重新定位到$(document).scrollTop()

  5. 5

    如何使用线性渐变效果在div中水平滚动?

  6. 6

    使用 Angular 4/6 动画在鼠标悬停时滚动 div

  7. 7

    如何使仅在鼠标位置div上滚动?

  8. 8

    滚动到鼠标滚轮jQuery上的下一个div

  9. 9

    使用按钮和鼠标滚动DIV

  10. 10

    如何在SWT中使用鼠标滚轮滚动滚动的合成

  11. 11

    如何使用鼠标滚动在其他div后面显示div

  12. 12

    使用动画div自动滚动网页

  13. 13

    jQuery使用动画平滑滚动到div

  14. 14

    鼠标滚轮在Div内无法工作

  15. 15

    如何在鼠标上下滚动时使div水平滚动

  16. 16

    在另一个div上使用滚轮的同时滚动一个div

  17. 17

    在另一个div上使用滚轮的同时滚动一个div

  18. 18

    使用鼠标滚轮和鼠标向上控制页面滚动动画

  19. 19

    如何使用鼠标滚轮在scrollviewer中滚动列表框

  20. 20

    如何使用键盘通过AutoHotkey模拟鼠标滚轮滚动?

  21. 21

    如何在 angular 上使用鼠标滚轮滚动到项目

  22. 22

    如何使用动画缩小div?

  23. 23

    使div上的div动画并延迟鼠标离开

  24. 24

    如何使用puppeteer在弹出窗口中模仿div内的鼠标滚动?

  25. 25

    如何限制滚动到鼠标当前悬停的div?

  26. 26

    当鼠标在jQuery中按下时,如何滚动div?

  27. 27

    如何获得鼠标滚轮的垂直滚动速率

  28. 28

    如何让鼠标滚轮在zsh上滚动屏幕?

  29. 29

    在TeeChart中使用鼠标滚轮滚动图表

热门标签

归档