Javascript-拖拽效果

简介: Javascript-拖拽效果

拖拽效果


在JavaScript中实现拖拽的基本步骤如下:


  • 给需要拖拽的元素添加鼠标按下事件监听器 在鼠标按下事件的处理函数中,记录鼠标按下时的初始位置和被拖拽元素的初始位置。
  • 给document对象添加鼠标移动事件监听器和鼠标释放事件监听器 在鼠标移动事件的处理函数中,计算鼠标移动的距离,并更新被拖拽元素的位置。
  • 在鼠标释放事件的处理函数中,移除鼠标移动和鼠标释放事件的监听器。


以下是拖拽效果实现步骤

  1. 创建主页面html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        #father{
            width: 100px;
            height: 100px;
            background: red;
            position: absolute;
        }
        #son{
            width: 100px;
            height: 100px;
            background: green;
            position: absolute;
            left: 110px;
        }
    </style>
</head>
<body>
    <div id="father">father</div>
    <div id="son">son</div>
    <script src="js/drag.js"></script>
    <script src="js/subdrag.js"></script>
    <script>
        new Drag('#father');
        new Subdrag('#son');
    </script>
</body>
</html>


  1. 拖拽js功能实现
class Drag{
    constructor(selector){
        //获取拖拽的对象
        this.ele = document.querySelector(selector);
        //添加事件
        this.ele.onmousedown = function(evt){
            //this: 原来指向了ele对象,这里需要一个实例对象
            this.fnDown(evt);
        }.bind(this);
    }
    fnDown(evt){
        let e = evt || window.event;
        //求鼠标的相对坐标值
        this.dis_x = e.offsetX;
        this.dis_y = e.offsetY;
        //移动事件
        document.onmousemove = function(evt){
            //this: document
            this.fnMove(evt);
        }.bind(this);
        //鼠标抬起事件
        document.onmouseup = this.fnUp;
        //取消默认行为
        document.ondragstart = function(){
            return false;
        }
    }
    fnMove(evt){
        let e = evt || window.event;
        this.ele.style.left = e.pageX - this.dis_x + 'px';
        this.ele.style.top = e.pageY - this.dis_y + 'px';
    }
    fnUp(){
        document.onmousemove = null;
    }
}


  1. js模块设置边界
class Subdrag extends Drag{
    constructor(selector){
        //调用父类的构造函数
        super(selector);
    }
    fnMove(evt){
        let e = evt || window.event;
        let left = e.pageX - this.dis_x;
        let top = e.pageY - this.dis_y;
        //设置边界
        if(left <= 0){
            left = 0;
        }else if(left >= document.documentElement.clientWidth - this.ele.offsetWidth){
            left = document.documentElement.clientWidth - this.ele.offsetWidth;
        }
        if(top <= 0){
            top = 0;
        }else if(top >= document.documentElement.clientHeight - this.ele.offsetHeight){
            top = document.documentElement.clientHeight - this.ele.offsetHeight;
        }
        this.ele.style.left = left + 'px';
        this.ele.style.top = top + 'px';
    }
}


目录
相关文章
|
7月前
|
前端开发 JavaScript
使用JavaScript实现复杂功能:构建一个自定义的拖拽功能
使用JavaScript实现复杂功能:构建一个自定义的拖拽功能
|
2天前
|
JavaScript 前端开发 异构计算
兼容移动手机的js拖拽插件Draggin.js
兼容移动手机的js拖拽插件Draggin.js
9 1
|
4月前
|
JavaScript 调度
Three.js开发秘籍:FlyControls的拖拽视角问题解决方案
Three.js开发秘籍:FlyControls的拖拽视角问题解决方案
66 0
|
6月前
|
JavaScript 前端开发 数据管理
使用Sortable.js库 实现Vue3 elementPlus 的 el-table 拖拽排序
使用Sortable.js库 实现Vue3 elementPlus 的 el-table 拖拽排序
1718 1
|
6月前
|
Web App开发 JavaScript 前端开发
一篇文章讲明白js实现移动端拖拽效果
一篇文章讲明白js实现移动端拖拽效果
44 0
|
存储 移动开发 JavaScript
js 拖拽效果实现数据交换(多个元素、可接口请求)
js 拖拽效果实现数据交换(多个元素、可接口请求)
131 0
js 拖拽效果实现数据交换(多个元素、可接口请求)
|
7月前
|
Web App开发 移动开发 JavaScript
一篇文带你使用js实现拖拽排序
一篇文带你使用js实现拖拽排序
|
7月前
|
JavaScript 前端开发
js小功能--如何实现按住shift拖拽多选div
js小功能--如何实现按住shift拖拽多选div
105 0
|
7月前
|
JavaScript 前端开发
JavaScript实现拖拽
JavaScript实现拖拽
|
7月前
|
JavaScript 前端开发
详细讲解原生js拖拽
详细讲解原生js拖拽