关于手动实现滚动的尝试

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 */
}
相关推荐
恋猫de小郭1 分钟前
Dart 3.15 新特性:this 终于支持类型提升了
android·前端·flutter
IT_陈寒17 分钟前
Vue开发实战:从入门到精通
前端·人工智能·后端
znnnk32 分钟前
2026 前端工程化新纪元:Rust 重塑工具链,AI Agent 接管流水线
前端·人工智能·rust
王大师王文峰43 分钟前
HTML 入门到进阶:语义化标签、表单与多媒体一篇打通【语义化布局、表单校验、video/audio、Canvas、无障碍与 SEO】
前端·css·node.js·html·css3·jquery·html5
风骏时光牛马1 小时前
AI_Coding:智能代码创作助手
前端
剪刀石头布啊9 小时前
vue-react为何要虚拟dom
前端
剪刀石头布啊10 小时前
ahooks常用的一些库,我们使用一下
前端
剪刀石头布啊10 小时前
从git更新本地提交记录到更新已经推送到远端记录
前端
Flynt12 小时前
axios 被投毒半年后,我把 npm 的"安全防线"实测了一遍:最信任的 SHA512 是安慰剂
前端·npm·node.js
excel12 小时前
Base62 和 Base64 有什么区别?
前端