JavaScript实现简单拖拽效果


Posted in Javascript onSeptember 15, 2021

本文实例为大家分享了JavaScript实现简单拖拽效果的具体代码,供大家参考,具体内容如下

先看实现的效果:

JavaScript实现简单拖拽效果

思路:里面用到了三个事件,鼠标按下、移动、松开事件

那么首先创建盒子并且给它赋予css样式

HTML:

// html
<div>
    <p>我是个蓝色的盒子</p>
</div>

CSS:

CSS
*{margin: 0;padding: 0;}
        div{
            width: 100px;
            height: 100px;
            background-color: cornflowerblue;
            position: absolute;
        }
        p{
            width: 100px;
            height: 100px;
            line-height: 100px;
            font-size: 10px;
            color: #fff;
            text-align: center;
            transition: .5s all;
        }
        p:hover{
            transform: translateY(-5px);
            transition: .5s all;
            box-shadow: 10px 10px 5px gray;
}

然后在JS设置相应的方法

var div = document.querySelector('div');
        var p   = document.querySelector('p');
        // 先定义初始化变量x、y
        var x =0;
        var y = 0;
        // var i = 3;
        var TorF= false;
        //盒子里的文字无法被选中
        div.onselectstart = function (e) {
            return false;
        }
        div.addEventListener('mousedown',function(e){
            // client:鼠标按钮时输出鼠标指针的坐标
            x = e.clientX;
            y = e.clientY;
            // 格式:obj.offsetLeft:获取左和上的偏移量
            // 在这里特别说明一下:这个属性是只读的,不能够赋值。
            // 返回当前元素距离父元素(body)左边的距离
            // 这里的l,t并不是声明了一个全局变量,而是创建了一个全局对象的属性。
            l = div.offsetLeft;
            t = div.offsetTop;
            // 鼠标设置移动箭头
            div.style.cursor =  'move';
            p.innerHTML =  '我被按下了 ^_^';
            TorF= true;
        });
        // 当整个屏幕触发移动事件时
        document.addEventListener('mousemove',function(e){
            // 如果为false则终止函数的执行并返回函数的值
            if (Torf == false) {
                return; 
            }
            // 在此函数中定义局部变量
            var twox = e.clientX;
            var twoy = e.clientY;
            // 用获取到的鼠标指针的坐标 - (鼠标指针的坐标 - 偏移量) = 实际鼠标拖动的位置
            // 后面一定要加上px单位,因为本身获取是没有单位的
            var twol = twox - (x-l);
            var twot = twoy - (y-t); 
            div.style.left = twol+'px';
            div.style.top = twot+'px';
            p.innerHTML =  '我正在被拖动  -.-';
        });
        div.addEventListener('mouseup',function(){
            // 松开键盘时停止鼠标移动事件
            TorF= false;
            // 鼠标恢复默认样式
            div.style.cursor = 'default';
            p.innerHTML =  '我被弹开了QAQ';
 })

注意:

1、想控制某一个盒子的位置,必须给盒子添加定位,否则盒子不会动

2、offsetLeft这个属性是只读的,不能够赋值

3、鼠标位置的的计算:鼠标指针的坐标 - (鼠标指针的坐标 - 偏移量) = 实际鼠标拖动的位置

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript FormatNumber函数实现方法
Dec 30 Javascript
js loading加载效果实现代码
Nov 24 Javascript
基于jquery的商品展示放大镜
Aug 07 Javascript
学习从实践开始之jQuery插件开发 菜单插件开发
May 03 Javascript
javascript动态添加样式(行内式/嵌入式/外链式等规则)
Jun 24 Javascript
Javascript动态创建表格及删除行列的方法
May 15 Javascript
js检查是否关闭浏览器的方法
Aug 02 Javascript
JS点击某个图标或按钮弹出文件选择框的实现代码
Sep 27 Javascript
vue-router路由懒加载和权限控制详解
Dec 13 Javascript
vue实现的下拉框功能示例
Jan 29 Javascript
JavaScript基于SVG的图片切换效果实例代码
Dec 15 Javascript
vue-video-player 断点续播的实现
Feb 01 Vue.js
一小时迅速入门Mybatis之bind与多数据源支持 Java API
Sep 15 #Javascript
Javascript之datagrid查询详解
Sep 15 #Javascript
Js类的构建与继承案例详解
Sep 15 #Javascript
JavaScript 数组去重详解
Sep 15 #Javascript
5种方法告诉你如何使JavaScript 代码库更干净
Sep 15 #Javascript
JavaScript小技巧带你提升你的代码技能
Sep 15 #Javascript
javascript函数式编程基础
Sep 15 #Javascript
You might like
推荐5款跨平台的PHP编辑器
2014/12/25 PHP
PHP操作MySQL的mysql_fetch_* 函数的常见用法教程
2015/12/25 PHP
php实现购物车功能(上)
2020/07/23 PHP
简单谈谈PHP中的Reload操作
2016/12/12 PHP
PHP开发的微信现金红包功能示例
2017/06/29 PHP
PHP+AjaxForm异步带进度条上传文件实例代码
2017/08/14 PHP
filters.revealTrans.Transition使用方法小结
2010/08/19 Javascript
jQuery 选择器项目实例分析及实现代码
2012/12/28 Javascript
Javascript如何判断数据类型和数组类型
2016/06/22 Javascript
js以分隔符分隔数组中的元素并转换为字符串的方法
2016/11/16 Javascript
ES6新特性三: Generator(生成器)函数详解
2017/04/21 Javascript
vue mixins组件复用的几种方式(小结)
2017/09/06 Javascript
Node.js 使用AngularJS的方法示例
2018/05/11 Javascript
vue+springmvc导出excel数据的实现代码
2018/06/27 Javascript
JavaScript代码调试方法实例小结
2019/01/05 Javascript
Vue 引入AMap高德地图的实现代码
2019/04/29 Javascript
富文本编辑器vue2-editor实现全屏功能
2019/05/26 Javascript
在layui中对table中的数据进行判断(0、1)转换为提示信息的方法
2019/09/28 Javascript
json_decode 索引为数字时自动排序问题解决方法
2020/03/28 Javascript
在Heroku云平台上部署Python的Django框架的教程
2015/04/20 Python
python 随机数使用方法,推导以及字符串,双色球小程序实例
2017/09/12 Python
解决python3中的requests解析中文页面出现乱码问题
2019/04/19 Python
TENSORFLOW变量作用域(VARIABLE SCOPE)
2020/01/10 Python
python语言是免费还是收费的?
2020/06/15 Python
html5构建触屏网站之网站尺寸探讨
2013/01/07 HTML / CSS
Charlotte Tilbury澳大利亚官网:英国美妆品牌
2018/10/05 全球购物
进程的查看和调度分别使用什么命令
2013/12/14 面试题
20年同学聚会邀请函
2014/02/04 职场文书
《小山羊和小灰兔》教学反思
2014/02/19 职场文书
高级销售求职信
2014/02/21 职场文书
交通事故协议书范文
2014/10/23 职场文书
2014年初三班主任工作总结
2014/12/05 职场文书
公务员年度考核登记表个人总结
2015/02/12 职场文书
手术室护士个人总结
2015/02/13 职场文书
离职信范文
2015/06/23 职场文书
redis缓存存储Session原理机制
2021/11/20 Redis