不废话,间接上代码:

  • 目录构造

    此目录构造只是将vue指令独自创立文件夹对立治理,同一注册。使用者可依据本人我的项目适当批改。

  • 指令代码:longpress.js
export default {  name: "longpress", // 指令名  instance: {    bind(el, binding, vnode) {      let isiOS = /iphone/gi.test(navigator.userAgent);      const iosUnable = binding.value.iosUnable || false;      if (isiOS && iosUnable) {        return;      }      var timer = null;      vnode.start = function(e) {        // 如果是点击事件,不启动计时器,间接返回        if (e.type === "click") {          return;        }        if (timer == null) {          // 创立定时器 ( value.time ms之后执行长按性能函数 )          timer = setTimeout(function() {            //执行长按性能函数            binding.value.cb();          }, binding.value.time);        }      };      vnode.cancel = function() {        if (timer !== null) {          clearTimeout(timer);          timer = null;        }      };      // 增加事件监听器      el.addEventListener("mousedown", vnode.start);      el.addEventListener("touchstart", vnode.start);      // 勾销计时器      el.addEventListener("click", vnode.cancel);      el.addEventListener("touchmove", vnode.cancel);      el.addEventListener("mouseout", vnode.cancel);      el.addEventListener("touchend", vnode.cancel);      el.addEventListener("touchcancel", vnode.cancel);    },    unbind(el, binding, vnode) {      // 增加事件监听器      el.removeEventListener("mousedown", vnode.start);      el.removeEventListener("touchstart", vnode.start);      // 勾销计时器      el.removeEventListener("click", vnode.cancel);      el.removeEventListener("touchmove", vnode.cancel);      el.removeEventListener("mouseout", vnode.cancel);      el.removeEventListener("touchend", vnode.cancel);      el.removeEventListener("touchcancel", vnode.cancel);    }  }};
  • 全局绑定
const requireContext = require.context(".", false, /\.js$/);export default (Vue: any) => {  requireContext.keys().forEach(path => {    if (path.indexOf("index") === -1) {      const requireItem = requireContext(path).default;      Vue.directive(requireItem.name, requireItem.instance);    }  });};

而后能够在main.js外面引入即可。

  • 应用办法:
  <div v-longpress="{ cb: langClick, time: 500, iosUnable: true }" >      内容  </div>