使用js实现的简单拖拽效果


Posted in Javascript onMarch 18, 2015

前端开发的时候,有好多地方用到拖拽效果,当然 http://jqueryui.com/draggable/  是个不错的选择,but 我是个打破砂锅问到底的人,抽点时间用js小小的实现了类似的插件,话不多说。

 first: html和css

<head>

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

    <title></title>

    <style>

        * {

            margin: 0;

            padding: 0;

        }

        #div1 {

            position: absolute;

            width: 100px;

            height: 100px;

            cursor: move;

            background-color: red;

        }

    </style>

</head>

<body>

    <div id="div1">

    </div>

</body>

</html>

使用js实现的简单拖拽效果

now,先把主要算法实现一下:

 <script>

        window.onload = function () {

            //获取需要拖拽的div

            var div1 = document.getElementById("div1");

            //添加鼠标按下事件

            div1.onmousedown = function (evt) {

                var oEvent = evt || event;

                //获取按下鼠标到div left  top的距离

                var distanceX = oEvent.clientX - div1.offsetLeft;

                var distanceY = oEvent.clientX - div1.offsetTop;

                //添加doc滑动时间

                document.onmousemove = function (evt) {

                    var oEvent = evt || event;

                    //重新计算div的left top值

                    var left = oEvent.clientX - distanceX;

                    var top = oEvent.clientY - distanceY;

                    //left  当小于等于零时,设置为零 防止div拖出document之外

                    if (left <= 0) {

                        left = 0;

                    }

                    //当left 超过文档右边界  设置为右边界

                    else if (left >= document.documentElement.clientWidth - div1.offsetWidth) {

                        left = document.documentElement.clientWidth - div1.offsetWidth;

                    }

                    if (top <= 0) {

                        top = 0;

                    }

                    else if (top >= document.documentElement.clientHeight - div1.offsetHeight) {

                        top = document.documentElement.clientHeight - div1.offsetHeight;

                    }

                    //重新给div赋值

                    div1.style.top = top + "px";

                    div1.style.left = left + "px";

                }

                //添加鼠标抬起事件

                div1.onmouseup = function () {

                    //清空事件

                    document.onmousemove = null;

                    div1.onmouseup = null;

                }

            }

        }

    </script>

yeah,使用面向对象实现一下

<style>

        * {

            margin:0;

            padding:0;

        }

        #div1 {

            width: 100px;

            height: 100px;

            background-color: red;

        }

        #div2 {

            background-color:yellow;

            width:100px;

            height:100px;

        }

    </style>

<div id="div1"></div>

<div id="div2"></div>

js Draggle class:

 function Drag(id) {

            this.div = document.getElementById(id);

            if (this.div) {

                this.div.style.cursor = "move";

                this.div.style.position = "absolute";

            }

            this.disX = 0;

            this.disY = 0;

            var _this = this;

            this.div.onmousedown = function (evt) {

                _this.getDistance(evt);

                document.onmousemove = function (evt) {

                    _this.setPosition(evt);

                }

                _this.div.onmouseup = function () {

                    _this.clearEvent();

                }

            }

        }

        Drag.prototype.getDistance = function (evt) {

            var oEvent = evt || event;

            this.disX = oEvent.clientX - this.div.offsetLeft;

            this.disY = oEvent.clientY - this.div.offsetTop;

        }

        Drag.prototype.setPosition = function (evt) {

            var oEvent = evt || event;

            var l = oEvent.clientX - this.disX;

            var t = oEvent.clientY - this.disY;

            if (l <= 0) {

                l = 0;

            }

            else if (l >= document.documentElement.clientWidth - this.div.offsetWidth) {

                l = document.documentElement.clientWidth - this.div.offsetWidth;

            }

            if (t <= 0) {

                t = 0;

            }

            else if (t >= document.documentElement.clientHeight - this.div.offsetHeight) {

                t = document.documentElement.clientHeight - this.div.offsetHeight;

            }

            this.div.style.left = l + "px";

            this.div.style.top = t + "px";

        }

        Drag.prototype.clearEvent = function () {

            this.div.onmouseup = null;

            document.onmousemove = null;

        }

at last:最终实现:

  window.onload = function () {

            new Drag("div1");

            new Drag("div2");

        }

效果如下:

使用js实现的简单拖拽效果

以上所述就是本文的全部内容了,希望能对大家更加熟练的掌握javascript有所帮助。

Javascript 相关文章推荐
JavaScript 存在陷阱 删除某一区域所有节点
May 10 Javascript
js利用事件的阻止冒泡实现点击空白模态框的隐藏
Jan 24 Javascript
JavaScript调试技巧之console.log()详解
Mar 19 Javascript
浅谈javascript实现八大排序
Apr 27 Javascript
Javascript类型系统之String字符串类型详解
Jun 21 Javascript
js实现的在线调色板功能完整实例
Dec 21 Javascript
Bootstrap轮播图学习使用
Feb 10 Javascript
JS简单实现自定义右键菜单实例
May 31 Javascript
ES6 javascript的异步操作实例详解
Oct 30 Javascript
(模仿京东用户注册)用JQuery实现简单表单验证,初学者必看
Jan 08 jQuery
JS计算两个时间相差分钟数的方法示例
Jan 10 Javascript
Vue-router 报错NavigationDuplicated的解决方法
Mar 31 Javascript
使用纯javascript实现放大镜效果
Mar 18 #Javascript
jQuery创建自定义的选择器用以选择高度大于100的超链接实例
Mar 18 #Javascript
javascript中的Base64、UTF8编码与解码详解
Mar 18 #Javascript
jQuery实现按键盘方向键翻页特效
Mar 18 #Javascript
javascript操作Cookie(设置、读取、删除)方法详解
Mar 18 #Javascript
jQuery选择id属性带有点符号元素的方法
Mar 17 #Javascript
jQuery统计指定子元素数量的方法
Mar 17 #Javascript
You might like
php include的妙用,实现路径加密
2008/07/29 PHP
php可生成缩略图的文件上传类实例
2014/12/17 PHP
php字符串函数学习之strstr()
2015/03/27 PHP
PhpStorm 如何优雅的调试Hyperf的方法步骤
2019/11/24 PHP
TP5框架实现签到功能的方法分析
2020/04/05 PHP
自动检查并替换文本框内的字符
2006/06/30 Javascript
js function使用心得
2010/05/10 Javascript
解决Extjs上传图片无法预览的解决方法
2012/03/22 Javascript
jquery队列queue与原生模仿其实现方法分享
2014/03/25 Javascript
jQuery实现点击弹出背景变暗遮罩效果实例代码
2016/06/24 Javascript
Bootstrap table简单使用总结
2017/02/15 Javascript
JavaScript瀑布流布局实现代码
2017/05/06 Javascript
JavaScript使用ZeroClipboard操作剪切板
2017/05/10 Javascript
Mongoose中document与object的区别示例详解
2017/09/18 Javascript
360doc网站不登录就无法复制内容的解决方法
2018/01/27 Javascript
Vue2.x Todo之自定义指令实现自动聚焦的方法
2019/01/08 Javascript
js图片查看器插件用法示例
2019/06/22 Javascript
微信小程序自定义弹窗实现详解(可通用)
2019/07/04 Javascript
jQuery zTree插件快速实现目录树
2019/08/16 jQuery
基于layui轮播图满屏是高度自适应的解决方法
2019/09/16 Javascript
js编写简易的计算器
2020/07/29 Javascript
vue 在单页面应用里使用二级套嵌路由
2020/12/19 Vue.js
python自动化测试实例解析
2014/09/28 Python
Python语言描述最大连续子序列和
2017/12/05 Python
使用python实现语音文件的特征提取方法
2019/01/09 Python
Python笔记之facade模式
2019/11/20 Python
pycharm激活码有效到2020年11月底
2020/09/18 Python
django处理select下拉表单实例(从model到前端到post到form)
2020/03/13 Python
Python requests模块session代码实例
2020/04/14 Python
详解Python中string模块除去Str还剩下什么
2020/11/30 Python
市政施工员自我鉴定
2014/01/15 职场文书
高中运动会广播稿
2014/01/21 职场文书
竞选班长的演讲稿
2014/04/24 职场文书
活动经费申请报告
2015/05/15 职场文书
2015年基建工作总结范文
2015/05/23 职场文书
flex布局中使用flex-wrap实现换行的项目实践
2022/06/21 HTML / CSS