js插件-简单拖拽

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

  1.  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>

  2. 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>
  3. 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");
            }

    效果如下:

  入园子已经三载有余,平时也爱在各位经营的园子溜达汲取知识。之前也有过想开一个自己的园子,但总因为这样那样的事情把这事遗忘了。最近发现身边的@考拉熊http://home.cnblogs.com/u/rccc/好早已经有了这个习惯。人啊,怎么说呢,总是向比自己强的人看起!加油 ,u can @o(∩_∩)o 哈哈

时间: 2024-10-05 18:33:43

js插件-简单拖拽的相关文章

jQuery拖拽插件制作拖拽排序特效

基于jQuery拖拽插件制作拖拽排序特效是一款非常实用的鼠标拖拽布局插件.效果图如下: 在线预览   源码下载 实现的代码. html代码: <h1>水平拖拽</h1> <div class="demo"> <div class="item item1"><span>1</span></div> <div class="item item2"><

js实现鼠标拖拽div-------Day44

如果去问这样一个问题"你觉得鼠标操作简单,还是键盘操作简单",相信会有多数人都会回答鼠标吧,毕竟键盘按钮那么多,如果手小了或者手法不规范了,太容易出问题了,也对操作的速度和有效性是大大的降低了,当然不可否认,会有那么一批人,操作起键盘来完全可以忽略鼠标的,但这些都应该是骨灰级别的了吧,起码我现在的层次还接触不到,只能向往. 然而,当面对这么一个问题时,我突然有点纠结,因为毕竟以前我也是那么想的,但是这次开发让我是大跌眼镜,键盘操作我在开发中,我只能判定其按键是否按键,然后根据不同按键进

JS Event 鼠标拖拽事件

<!DOCTYPE html><html> <head>        <meta charset="UTF-8">        <title>JS Event鼠标拖拽事件</title>                <style>            #box{width:200px;height:200px;background:#000;position:absolute;}       

JS打造的拖拽翻页效果

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-

js实现鼠标拖拽多选功能

最近做了一个用js实现鼠标拖拽多选的功能,于是整理了一下思路,写了一个小demo:遮罩出现:被遮罩盖住的,即为选中的块(背景色为粉色)下面是具体代码,注释已在文中,与大家交流. <!DOCTYPE html> <html> <head> <title>鼠标拖拽多选功能</title> <script src="https://cdn.bootcss.com/jquery/1.10.2/jquery.min.js">

JS简单拖拽效果

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>拖拽</title> <style> *{margin:0;padding:0;} #box{width:100px;height:100px;background-color: #f00;position:absolute;left:0;top:0

jQ插件--时间线插件和拖拽API

这个时间轴是工作上用到的,自己写了一个, qq空间有时间轴的控件, 百度文库也有时间轴的控件: 百度的时间轴大概是这样的: 用户点击对应的锚链接,  那个三角会滚动, 然后左侧的界面也会滚动: 实际的效果如下图,用户点击左侧的按钮或者右侧的input,滚动条都会主动滚动, 这里有个小技巧就是用after和before伪类生成三角形, 用户点击按钮的滚动效果直接用jq的animate方法: 点击查看DEMO:打开 <!-- //设置内容; window.onWebMessage( '{"ty

[javascript]一种兼容性比较好的简单拖拽

作为一个马上要找工作.非计算机专业.热爱前端的大四狗,最近开始疯狂写demo.看书,准备九.十月份的校招. 晚上用js实现了一个比较简单(low)的拖拽效果,初步测试兼容性还是不错的,于是写一段小博文记录下~大神求轻喷 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> &l

jquery插件之拖拽

该插件乃本博客作者所写,目的在于提升作者的js能力,也给一些js菜鸟在使用插件时提供一些便利,老鸟就悠然地飞过吧. 此插件旨在实现目前较为流行的拖拽效果,您可以根据自己的实际需求来设置被拖拽元素是否可以被拖拽至可视区域以外.整体代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.d