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的资料请关注脚本之家其它相关文章!

相关文章

  • AngularJS Toaster使用详解

    AngularJS Toaster使用详解

    AngularJS Toaster是一个 AngularJS 提示框.基于angular v1.2.6 及以上和angular-animate.这篇文章主要介绍了AngularJS Toaster使用详解,需要的朋友可以参考下
    2017-02-02
  • Angular.js 实现带手柄自由调整页面大小的功能

    Angular.js 实现带手柄自由调整页面大小的功能

    这篇文章主要介绍了Angular.js 实现带手柄自由调整页面大小的功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-12-12
  • AngularJs bootstrap搭载前台框架——准备工作

    AngularJs bootstrap搭载前台框架——准备工作

    本文主要介绍AngularJs bootstrap搭载前台框架,这里对Bootstrap 搭载环境,及注意事项做了讲解,有需要的小伙伴可以参考下
    2016-09-09
  • 对比分析AngularJS中的$http.post与jQuery.post的区别

    对比分析AngularJS中的$http.post与jQuery.post的区别

    这篇文章主要给大家对比分析AngularJS中的$http.post与jQuery.post的区别,十分的详细,是篇非常不错的文章,这里推荐给小伙伴们。
    2015-02-02
  • AngularJS实现使用路由切换视图的方法

    AngularJS实现使用路由切换视图的方法

    这篇文章主要介绍了AngularJS实现使用路由切换视图的方法,结合学生信息管理系统为例分析了使用controllers.js控制器来切换视图的具体步骤与相关操作技巧,需要的朋友可以参考下
    2017-01-01
  • AngularJS实现的输入框字数限制提醒功能示例

    AngularJS实现的输入框字数限制提醒功能示例

    这篇文章主要介绍了AngularJS实现的输入框字数限制提醒功能,涉及AngularJS事件监听与元素属性动态操作相关实现技巧,需要的朋友可以参考下
    2017-10-10
  • 总结AngularJS开发者最常犯的十个错误

    总结AngularJS开发者最常犯的十个错误

    AngularJS是如今最受欢迎的JS框架之一,简化开发过程是它的目标之一,这使得它非常适合于元型较小的apps的开发,但也扩展到具有全部特征的客户端应用的开发。下面给大家总结了AngularJS开发者最常犯的十个错误,有需要的可以参考学习下。
    2016-08-08
  • angularjs实现与服务器交互分享

    angularjs实现与服务器交互分享

    AngularJS是Google开发的纯客户端JavaScript技术的WEB框架,用于扩展、增强HTML功能,它专为构建强大的WEB应用而设计。
    2014-06-06
  • AngularJS安装版本问题解析

    AngularJS安装版本问题解析

    这篇文章主要介绍了AngularJS安装版本问题解析,在这需要注意在安装前请确保自己安装NodeJS环境版本为V18及以上,否则会因node版本问题导致项目无法正常运行,需要的朋友可以参考下
    2024-02-02
  • AngularJS入门教程之路由与多视图详解

    AngularJS入门教程之路由与多视图详解

    本文主要介绍AngularJS 路由与多视图详解,这里整理了相关资料及示例代码,详细说明了在开发过程中如何应用,有兴趣的朋友可以看下
    2016-08-08

最新评论