vue之自定义指令

作用: 让最后一个元素绝对定位并尾随倒数第二个元素

Vue.directive('absolute-after', {
  /**
   * @param {Node} el
   */
  inserted(el) {
    if (el.parentNode.childNodes.length >= 2 && el.parentNode.lastChild === el) {
      const pHeight = $(el).prev('*')
        .height();
      const pWidth = $(el).prev('*')
        .width();
      const cHeight = $(el).height();
      $(el).css({
        position: 'absolute',
        left: pWidth,
        top: (pHeight - cHeight) / 2,
      });
    }
  },
});

作用: v-dialogdragwidth: 弹窗宽度拖大 拖小

// v-dialogDragWidth: 弹窗宽度拖大 拖小
Vue.directive('dialogDragWidth', {
  bind(el, binding, vnode, oldVnode) {
    const dragDom = binding.value.$el.querySelector('.el-dialog');

    el.onmousedown = (e) => {
      // 鼠标按下,计算当前元素距离可视区的距离
      const disX = e.clientX - el.offsetLeft;

      document.onmousemove = function (e) {
        e.preventDefault(); // 移动时禁用默认事件

        // 通过事件委托,计算移动的距离
        const l = e.clientX - disX;
        dragDom.style.width = `${l}px`;
      };

      document.onmouseup = function (e) {
        document.onmousemove = null;
        document.onmouseup = null;
      };
    };
  },
});

最后更新于

这有帮助吗?