www.cnblogs.com/lzq035/p/14…
import defaultImg from '@/assets/common/head.jpg'
import store from '@/store'
Snipaste_2023-02-12_12-24-47.png(https:
export const imgerror = {
inserted(el) {
el.onerror = function () {
this.src = defaultImg
}
},
}
使用方法: 微信截图_20230212122214.png(https:
export const focus = {
inserted(el) {
el.focus()
},
}
使用方法:同理
export const permission = {
inserted(el, binding) {
const points = store.state.user.userInfo.roles.points
if (!points.includes(binding.value)) {
el.style.display = 'none'
}
},
}
使用方法: 权限按钮.png(https:
export const debounce = {
inserted(el, binding) {
let timer
el.addEventListener('click', () => {
if (timer) {
clearTimeout(timer)
}
timer = setTimeout(() => {
binding.value()
}, 500)
})
},
}
使用方法: 防抖按钮.png(https:
]()```
export const longpress = {
bind: function (el, binding, vNode) {
if (typeof binding.value !== "function") {
throw "callback must be a function";
}
// 定义变量
let pressTimer = null;
// 创建计时器( 2秒后执行函数 )
let start = (e) => {
if (e.type === "click" && e.button !== 0) {
return;
}
if (pressTimer === null) {
pressTimer = setTimeout(() => {
handler();
}, 2000);
}
};
// 取消计时器
let cancel = (e) => {
if (pressTimer !== null) {
clearTimeout(pressTimer);
pressTimer = null;
}
};
// 运行函数
const handler = (e) => {
binding.value(e);
};
// 添加事件监听器
el.addEventListener("mousedown", start);
el.addEventListener("touchstart", start);
// 取消计时器
el.addEventListener("click", cancel);
el.addEventListener("mouseout", cancel);
el.addEventListener("touchend", cancel);
el.addEventListener("touchcancel", cancel);
},
// 当传进来的值更新的时候触发
componentUpdated(el, { value }) {
el.$value = value;
},
// 指令与元素解绑的时候,移除事件绑定
unbind(el) {
el.removeEventListener("click", el.handler);
}
};
使用方法
<div style="width: 200px; height: 200px; background-color: yellowgreen" v-longpress="longpress">2</div>
methods: {
longpress() {
alert("长按指令生效");
}
}