1、第一种
原文链接:https://blog.csdn.net/weixin_52923266/article/details/132476743
第一步:
在utils下面新建一个directives.js文件,然后引入如下代码
const dragscroll = (el) => {
el.onmousedown = ev => {
const disX = ev.clientX;
const disY = ev.clientY; // 需要上下移动可以加
const originalScrollLeft = el.scrollLeft;
const originalScrollTop = el.scrollTop; // 需要上下移动可以加
const originalScrollBehavior = el.style['scroll-behavior'];
const originalPointerEvents = el.style['pointer-events'];
el.style['scroll-behavior'] = 'auto';
ev.preventDefault();//阻止默认事假,比如拖拽选中文本等
// 鼠标移动事件是监听的整个document,这样可以使鼠标能够在元素外部移动的时候也能实现拖动
document.onmousemove = dv => {
dv.preventDefault();
const distanceX = dv.clientX - disX;
const distanceY = dv.clientY - disY; // 需要上下移动可以加
el.scrollTo(originalScrollLeft - distanceX, originalScrollTop - distanceY); // 需要上下移动和左右移动
// el.scrollTo(originalScrollLeft - distanceX, 0); // 不需要上下拖拽,y轴值为0
};
document.onmouseup = () => {
document.onmousemove = null;
document.onmouseup = null;
el.style['scroll-behavior'] = originalScrollBehavior;
el.style['pointer-events'] = originalPointerEvents;
};
};
};
export default dragscroll;
第二步:
在main.js中引入
import dragscroll from '@/utils/directives.js'
app.directive('dragscroll',dragscroll)
第三步:
页面直接使用即可
<div id="imgBox" v-dragscroll>
<img src="@/assets/images/image.svg" alt="" />
</div>
2、第二种
原文链接:
https://blog.csdn.net/qq_59625204/article/details/139297758?spm=1001.2014.3001.5506
单独封装一个addMouseEvent.ts文件
// 添加鼠标移动事件
export const addMouseEvent = (el: string) => {
let container = document.querySelector(el) as HTMLDivElement;
let isMouseDown = false;
let startX = 0;
let scrollLeft = 0;
// 鼠标按下事件
const onMouseDown = (e: MouseEvent) => {
isMouseDown = true;
startX = e.pageX - container.offsetLeft;
scrollLeft = container.scrollLeft;
};
// 鼠标移动事件
const onMouseMove = (e: MouseEvent) => {
if (!isMouseDown) return;
e.preventDefault();
let x = e.pageX - container.offsetLeft;
let walk = (x - startX) * 1; // 调整滚动速度
container.scrollLeft = scrollLeft - walk;
};
// 鼠标抬起事件
const onMouseUp = () => {
isMouseDown = false;
};
// 鼠标离开事件
const onMouseLeave = () => {
isMouseDown = false;
};
container.addEventListener("mousedown", function (e) {
onMouseDown(e);
});
container.addEventListener("mouseleave", function () {
onMouseLeave();
});
container.addEventListener("mouseup", function () {
onMouseUp();
});
container.addEventListener("mousemove", function (e) {
onMouseMove(e);
});
const removeEventListeners = () => {
container.removeEventListener("mousedown", onMouseDown);
container.removeEventListener("mouseleave", onMouseLeave);
container.removeEventListener("mouseup", onMouseUp);
container.removeEventListener("mousemove", onMouseMove);
};
return removeEventListeners;
};
在页面中使用:
onMounted(() => {
nextTick(() => {
mouseLeaveEvent.value = addMouseEvent(".device-list");
});
});
onBeforeUnmount(() => {
mouseLeaveEvent.value && mouseLeaveEvent.value();
});
隐藏滚滚动条
::-webkit-scrollbar {
/* 隐藏Webkit浏览器的滚动条 */
display: none;
}