关于手动实现滚动的尝试

html 复制代码
<div class="tags-box" ref="draggableDiv" @mousedown="startDrag">
    <div class="tag-item active">全部</div>
    <div class="tag-item">分类1</div>
    <div class="tag-item">分类2</div>
    <div class="tag-item">分类3</div>
    <div class="tag-item">分类3</div>
</div>
js 复制代码
let ishasDragged = false; // 鼠标是否被拖拽 拖拽玩后不进行type选择
const draggableDiv = ref(null);
let isDragging = false;
let offsetX = 0;
const startDrag = (e) => {
    console.log("startDrag",draggableDiv.value.scrollLeft)
    isDragging = true;
    offsetX = e.clientX
};

const drag = (e) => {
    if (!isDragging) return;
    e.preventDefault();
    console.log("drag",e.clientX)
    const x = offsetX - e.clientX
    offsetX = e.clientX
    if(x !== 0) {
        ishasDragged = true
    }
    draggableDiv.value.scrollLeft = draggableDiv.value.scrollLeft + x
};

const stopDrag = () => {
    isDragging = false;
    // 防止移动完后直接选择
    setTimeout(() => {
        ishasDragged = false
    }, 0)
};

onMounted(() => {
    window.addEventListener('mousemove', drag);
    window.addEventListener('mouseup', stopDrag);
})

onUnmounted(()=> {
    window.removeEventListener('mousemove', drag);
    window.removeEventListener('mouseup', stopDrag);
})
css 复制代码
.tags-box{
  scrollbar-width: none; /* Firefox */
  -ms-overflow-style: none; /* IE and Edge */
}
相关推荐
小雨下雨的雨1 天前
井字棋AI机器人实现详解 - Minimax算法实战-鸿蒙PC Electron框架完成
前端·人工智能·算法·华为·electron·鸿蒙
ZC跨境爬虫1 天前
跟着 MDN 学JavaScript day_7:数学运算与逻辑判断实战测试
开发语言·前端·javascript·学习·ecmascript
fangdengfu1231 天前
ES分析系统各个服务日志占用量
java·前端·elasticsearch
JustHappy1 天前
古法编程秘籍(六):程序到底是怎么跑起来的?从 IO 到中断,一次讲明白
前端·后端·全栈
HYCS1 天前
用pixi.js实现fabric.js(六):从线性代数的角度理解编辑器交互
前端·javascript·canvas
卷帘依旧1 天前
useImperativeHandle的作用
前端
卷帘依旧1 天前
Hooks在Fiber上的存储原理
前端
you45801 天前
学成在线--day02 CMS前端开发(含Vue基础知识得回顾)
前端·javascript·vue.js
xiaofeichaichai1 天前
虚拟 DOM
前端·javascript·vue.js