按照小菜的尿性先放一个demo,最近用指令写东西蛮多的,发现指令真的是一个好东西。
@/util/dom.js文件
/**
* 功能:dom绑定事件
* 参数:element(dom节点)
* event(事件名称)
* handler(回调)
*返回:无
* */
export const on = function () {
if (document.addEventListener) {
return function (element, event, handler) {
if (element && event && handler) {
element.addEventListener(event, handler, false);
}
};
} else {
return function (element, event, handler) {
if (element && event && handler) {
element.attachEvent('on' + event, handler);
}
};
}
}();
/**
* 功能:移除dom绑定的事件
* 参数:element(dom节点)
* event(事件名称)
* handler(回调函数)
* 返回:无
* */
export const off = function () {
if (document.removeEventListener) {
return function (element, event, handler) {
if (element && event) {
element.removeEventListener(event, handler, false);
}
};
} else {
return function (element, event, handler) {
if (element && event) {
element.detachEvent('on' + event, handler);
}
};
}
}();
在directive文件夹下创建一个scroll.js
文件,将下面代码复制进去
//盒子滚动条拖拽
import { on, off } from '@/util/dom';
let targetDrag = { //托拽
isDown: false,
coord:{
x: 0,
y: 0
}
}
//x轴拖动回调 鼠标按下
const scrollMousedown = event=>{
targetDrag.isDown = true;
targetDrag.coord.x = event.pageX;
targetDrag.coord.y = event.pageY;
}
//x轴拖动回调 鼠标释放
const scrollMouseup = event=>{
targetDrag.isDown = false;
targetDrag.coord.x = 0;
targetDrag.coord.y = 0;
}
//x轴拖动回调 鼠标移动
const scrollMousemove = (event,el)=>{
}
export const scrollx = {
inserted:function(el){
//鼠标按下
on(el,'mousedown',scrollMousedown);
//鼠标释放
on(el,'mouseup',scrollMouseup);
//鼠标托拽
on(el,'mousemove',event=>{
let movX = targetDrag.coord.x - event.pageX;
targetDrag.coord.x = event.pageX;
if(targetDrag.isDown){
el.scrollLeft = el.scrollLeft + movX;
}
});
},
unbind:function(el){
off(el,'mousedown',scrollMousedown);
off(el,'mouseup',scrollMouseup);
off(el,'mousemove',scrollMousemove);
//清空
targetDrag = { //托拽
isDown: false,
coord:{
x: 0,
y: 0
}
}
}
}
}
在需要vue文件中指令引入
然后在dom
<div class="content" style="overflow-x:auto;"v-scrollx>
</div>