Angular6实现拖拽功能指令drag实例详解

 更新时间:2023年11月01日 11:59:47   作者:双木枯荣  
这篇文章主要为大家介绍了Angular6实现拖拽功能指令drag实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

1. 指令代码

import { Directive, ElementRef, OnInit, HostListener } from '@angular/core';
@Directive({
  selector: '[appDrag]'
})
export class DragDirective implements OnInit {
  constructor(public el: ElementRef) {
  }
  public isDown = false;
  public disX; // 记录鼠标点击事件的位置 X
  public disY; // 记录鼠标点击事件的位置 Y
  private totalOffsetX = 0; // 记录总偏移量 X轴
  private totalOffsetY = 0; // 记录总偏移量 Y轴
  // 点击事件
  @HostListener('mousedown', ['$event']) onMousedown(event) {
    this.isDown = true;
    this.disX = event.clientX;
    this.disY = event.clientY;
  }
  // 监听document移动事件事件
  @HostListener('document:mousemove', ['$event']) onMousemove(event) {
    // 判断该元素是否被点击了。
    if (this.isDown) {
      this.el.nativeElement.style.left = this.totalOffsetX + event.clientX - this.disX + 'px';
      this.el.nativeElement.style.top = this.totalOffsetY + event.clientY - this.disY + 'px';
    }
  }
  // 监听document离开事件
  @HostListener('document:mouseup', ['$event']) onMouseup(event) {
    // 只用当元素移动过了,离开函数体才会触发。
    if (this.isDown) {
      console.log('fail');
      this.totalOffsetX += event.clientX - this.disX;
      this.totalOffsetY += event.clientY - this.disY;
      this.isDown = false;
    }
  }
  ngOnInit() {
    this.el.nativeElement.style.position = 'relative';
  }
}

2.使用

首先将指令在Module中注册,在declarations数组中添加指令。

然后在要拖拽的组件上,添加指令 appDrag ,即可实现拖拽功能。

以上就是Angular6实现拖拽功能指令drag实例详解的详细内容,更多关于Angular6拖拽功能指令drag的资料请关注脚本之家其它相关文章!

相关文章

  • Angular value与ngValue区别详解

    Angular value与ngValue区别详解

    这篇文章主要介绍了Angular value与ngValue区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • 3个可以改善用户体验的AngularJS指令介绍

    3个可以改善用户体验的AngularJS指令介绍

    这篇文章主要介绍了3个可以改善用户体验的AngularJS指令,AngularJS是一款具有很高人气的JavaScript框架,需要的朋友可以参考下
    2015-06-06
  • angularjs ui-router中路由的二级嵌套

    angularjs ui-router中路由的二级嵌套

    本篇文章主要介绍了angularjs ui-router中路由的二级嵌套,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-03-03
  • angular2模块和共享模块详解

    angular2模块和共享模块详解

    这篇文章主要介绍了angular2模块和共享模块详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • AngularJS 应用模块化的使用

    AngularJS 应用模块化的使用

    这篇文章主要介绍了AngularJS 应用模块化的使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • Angular实现双向折叠列表组件的示例代码

    Angular实现双向折叠列表组件的示例代码

    本篇文章主要介绍了Angular实现双向折叠列表组件的示例代码,分为左右两组,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • 浅谈angular4 ng-content 中隐藏的内容

    浅谈angular4 ng-content 中隐藏的内容

    本篇文章主要介绍了浅谈angular4 ng-content 中隐藏的内容,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • 利用require.js与angular搭建spa应用的方法实例

    利用require.js与angular搭建spa应用的方法实例

    这篇文章主要给大家介绍了关于利用require.js与angular搭建spa应用的方法实例,文中通过示例代码给大家介绍的非常详细,对大家的理解和学习具有一定的参考学习价值,需要的朋友们下面跟着小编来一起看看吧。
    2017-07-07
  • 用AngularJS来实现监察表单按钮的禁用效果

    用AngularJS来实现监察表单按钮的禁用效果

    本篇文章主要介绍了用AngularJS来实现监察表单按钮的禁用效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2016-11-11
  • Angular应用程序的Hydration基本概念详解

    Angular应用程序的Hydration基本概念详解

    这篇文章主要为大家介绍了Angular应用程序的Hydration基本概念详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09

最新评论