在可滚动容器上拖动时防止自动滚动
Prevent auto scroll while dragging over a scrollable container
此处的示例:http://codepen.io/eliseosoto/pen/YqxQKx
const l = document.getElementById('scrollableList');
const item3 = document.getElementById('item3');
l.addEventListener('mouseover', function(e) {
e.stopPropagation();
e.preventDefault();
console.log('mouseover', e.target);
});
item3.addEventListener('dragenter', function(e) {
e.stopPropagation();
e.preventDefault();
console.log('dragenter', e.target);
});
l.addEventListener('dragover', function(e) {
console.log('xxx');
e.stopPropagation();
e.preventDefault();
});
l.addEventListener('scroll', function(e) {
console.log('scroll!', e);
e.stopPropagation();
e.preventDefault();
});
item3.addEventListener('dragover', function(e) {
console.log('dragover item3');
e.stopPropagation();
e.preventDefault();
});
#container {
background-color: lightblue;
}
#scrollableList {
height: 50px;
background-color: green;
overflow: auto;
}
<div id="container">
<br>
<div id="scrollableList">
<div>Item 1</div>
<div>Item 2</div>
<div id="item3">Item 3</div>
<div>Item 4</div>
<div>Item 5</div>
<div>Item 6</div>
<div>Item 7</div>
<div>Item 8</div>
<div>Item 9</div>
<div>Item 10</div>
<div>Item 11</div>
<div>Item 12</div>
<div>Item 13</div>
<div>Item 14</div>
</div>
<br>
<div id="dragMe" draggable="true">Drag me near the top/bottom of the Item list.</div>
</div>
请注意,当您拖动项目列表顶部/底部附近的"拖动我…"文本时,该列表将自动滚动。
通常,这种行为是有用的,因为您可以将所需的放置区域放在视图中,但有时这根本不是所需的。
有没有一种纯粹的JS方法可以在Chrome 47+中禁用这种行为?我在不同的元素上尝试了"拖动"、"鼠标悬停"、"滚动"等,但都无济于事。
我可以通过存储滚动的当前位置来实现这一点,当滚动事件发生时,我将scrollTop设置为之前存储的位置。
const list = document.getElementById('scrollableList');
const dragMe = document.getElementById('dragMe');
var scrollPosition = 0;
dragMe.addEventListener('dragstart', function(e) {
scrollPosition = list.scrollTop;
list.addEventListener('scroll', preventDrag);
});
dragMe.addEventListener('dragend', function(e) {
list.removeEventListener('scroll', preventDrag);
});
function preventDrag(e) {
list.scrollTop = scrollPosition;
};
很奇怪你不能取消滚动事件。
http://codepen.io/cgatian/pen/JXZjOB?editors=1010
相关文章:
- JQuery UI可拖动潜水与滚动棒到鼠标
- 支持在画布上滚动和拖动操作
- 移动浏览器-如何删除拖动到水平滚动
- 自定义内容滚动框'的滚动条在拖动时跳转
- 滚动容器时,元素的拖动出错
- 拖放区中可拖动的 Jqueryui 不会滚动,会恢复,滚动条存在
- 在可滚动容器上拖动时防止自动滚动
- 拖动时设置滚动条不透明度
- JQuery UI拖动到可排序状态而不滚动
- 拖动滚动触摸设备,如手机/ iPad
- 谷歌地图在滚动时拖动
- 用于制作可滚动和可拖动图像滑块的库
- 使用 jQuery 拖动滚动页面
- iPad 无法在具有 JavaScript UI 可拖动页面的页面上滚动
- 光滑网格:可以在拖动列时在网格上水平滚动
- 使用 D3.js 拖动元素时滚动
- 拖动时自动滚动
- 触摸拖动画布时滚动页面
- Jquery Fancybox 可拖动的滚动条问题
- 在任一图形上使用滚轮/拖动时放大和缩小/滚动的堆叠图形