drag.js 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import Vue from 'vue'
  2. Vue.directive('drag', { //自定义指令 JS
  3. bind:function (el, binding) {
  4. let oDiv = el; //当前元素
  5. oDiv.onmousedown = function (e) {
  6. //鼠标按下,计算当前元素距离可视区的距离
  7. let disX = e.clientX - oDiv.offsetLeft;
  8. let disY = e.clientY - oDiv.offsetTop;
  9. document.onmousemove = function (e) {
  10. //通过事件委托,计算移动的距离
  11. let l = e.clientX - disX;
  12. let t = e.clientY - disY;
  13. //移动当前元素
  14. oDiv.style.left = l + 'px';
  15. oDiv.style.top = t + 'px';
  16. };
  17. document.onmouseup = function () {
  18. document.onmousemove = null;
  19. document.onmouseup = null;
  20. };
  21. };
  22. function onMouseWheel(ev) {/*当鼠标滚轮事件发生时,执行一些操作*/
  23. ev = ev || window.event;
  24. var down = true; // 定义一个标志,当滚轮向下滚时,执行一些操作
  25. down = ev.wheelDelta?ev.wheelDelta<0:ev.detail>0;
  26. if(down){
  27. oDiv.style.width = oDiv.offsetWidth-20+'px';
  28. }else{
  29. oDiv.style.width = oDiv.offsetWidth+20+'px';
  30. }
  31. if(ev.preventDefault){/*FF 和 Chrome*/
  32. ev.preventDefault();// 阻止默认事件
  33. }
  34. return false;
  35. }
  36. addEvent(oDiv,'mousewheel',onMouseWheel);
  37. addEvent(oDiv,'DOMMouseScroll',onMouseWheel);
  38. function addEvent(obj,xEvent,fn) {
  39. if(obj.attachEvent){
  40. obj.attachEvent('on'+xEvent,fn);
  41. }else{
  42. obj.addEventListener(xEvent,fn,false);
  43. }
  44. }
  45. }
  46. });