1. ~function ($) {
    2. if (typeof $ === 'undefined') {
    3. throw new ReferenceError('The current plugin needs to rely on jquery!');
    4. }
    5. //=>空函数没用:我们可以把它赋值给所有的回调函数默认值,也就是回调函数不传,执行的就是这个空函数(不会报错)
    6. let emptyFn = function emptyFn() {
    7. };
    8. class Drag {
    9. constructor(ele, options = {}) {
    10. if (typeof ele === 'undefined' || ele.nodeType !== 1) {
    11. throw new ReferenceError('ele is a must pass parameter and must be an element object!');
    12. }
    13. //=>INIT PARAMETERS
    14. let {
    15. selector = ele,
    16. dragstart = emptyFn,
    17. draging = emptyFn,
    18. dragend = emptyFn
    19. } = options;
    20. /*
    21. * dragTarget:同过谁来移动
    22. * ele:移动谁
    23. */
    24. this.ele = ele;
    25. this.dragTarget = selector;
    26. if (typeof selector === 'string') {
    27. //=>传递一个选择器进来了:我们是想通过操作ELE中某个元素让ELE实现移动
    28. this.dragTarget = $(ele).find(selector)[0];
    29. }
    30. this.dragstart = dragstart;
    31. this.draging = draging;
    32. this.dragend = dragend;
    33. //=>DRAG-START:保证执行原型上的方法,方法中的THIS都是当前类的实例
    34. this.dragTarget.addEventListener('mousedown', this.down.bind(this));
    35. }
    36. //=>MOUSE-DOWN
    37. down(ev) {
    38. this.starX = ev.clientX;
    39. this.starY = ev.clientY;
    40. let $ele = $(this.ele);
    41. this.starL = parseFloat($ele.css('left'));
    42. this.starT = parseFloat($ele.css('top'));
    43. this.MOVE = this.move.bind(this);
    44. this.UP = this.up.bind(this);
    45. document.addEventListener('mousemove', this.MOVE);
    46. document.addEventListener('mouseup', this.UP);
    47. this.dragstart();//=>THIS:当前实例
    48. }
    49. //=>MOUSE-MOVE
    50. move(ev) {
    51. let {starX, starY, starL, starT} = this,
    52. curL = ev.clientX - starX + starL,
    53. curT = ev.clientY - starY + starT;
    54. $(this.ele).css({
    55. top: curT,
    56. left: curL
    57. });
    58. this.curL = curL;
    59. this.curT = curT;
    60. this.draging();
    61. }
    62. //=>MOUSE-UP
    63. up(ev) {
    64. document.removeEventListener('mousemove', this.MOVE);
    65. document.removeEventListener('mouseup', this.UP);
    66. this.dragend();
    67. }
    68. }
    69. window.Drag = Drag;
    70. }(jQuery);
    71. /*
    72. new Drag(ele, {
    73. selector: 'h3' //=>SELECTOR:当前需要操作的目标元素选择器(按住它实现让ELE移动,不传默认就是按住ELE移动)
    74. });*/