Javascript学习------拖拽效果

<!DOCTYPE html>
<html>
<head>
    <title>js拖拽</title>
    <style>
        * { margin: 0px; padding: 0px; }
        .drafting { width: 450px; height: 350px; overflow: hidden; position: absolute; z-index: 1; margin: 0px; box-shadow: 0px 0px 5px #888; left: 0px; right: 0px; background: #ddd; padding: 1px; }
        .drafting .dra-top { height: 45px; background: #ddd; cursor: move; line-height: 45px; }
        .drafting .dra-content { height: 285px; overflow: hidden; padding: 10px; background: #fff; }
    </style>
</head>
<body>
    <div class="drafting" id="drafting">
        <div class="dra-top" id="dramove">求拖我</div>
        <div class="dra-content">内容在这里</div>
    </div>
    <span id="span" style="position:relative;z-index:2;"></span>
    <script type="text/javascript">
        var dra = {
            //初始化
            config: {
                dom: document.getElementById("drafting"),//拖拽容器
                dom1: document.getElementById("dramove"),//拖拽dom
                domw: document.getElementById("drafting").scrollWidth,
                domh: document.getElementById("drafting").scrollHeight,
                startleft: 0,//起始left位置
                starttop: 0,//起始top位置
                endleft: 0,//结束left位置
                endtop: 0,//结束top位置
                x: 0,//鼠标相对窗口x坐标
                y: 0,//鼠标相对窗口y坐标
                clientX: 0,//起始鼠标位置
                clientY: 0//起始鼠标位置
            },
            clearselect: window.getSelection ? function () { window.getSelection().removeAllRanges(); } : function () { document.selection.empty(); },//清空用户文体选中
            //事件绑定
            init: function () {
                var ts = this;
                ts.config.startleft = ts.config.dom.offsetLeft;
                ts.config.starttop = ts.config.dom.offsetTop;
                ts.config.dom1.onmousedown = function (e) {
                    e = e || window.event;
                    ts.config.clientX = e.clientX;
                    ts.config.clientY = e.clientY;
                    ts.config.x = ts.config.clientX - ts.config.startleft;
                    ts.config.y = ts.config.clientY - ts.config.starttop;
                    //document.getElementById("span").innerText = ts.config.domw + "," + ts.config.domh;
                    document.onmousemove = function () {
                        ts.movestart();
                    }
                    document.onmouseup = function () {
                        ts.moveend();
                    }
                };
            },
            movestart: function (e) {
                var ts = this;
                e = e || window.event;
                var x = ts.config.clientX - e.clientX;//x移动距离
                var y = ts.config.clientY - e.clientY;//y移动距离
                ts.config.endleft = ts.config.startleft - x;
                ts.config.endtop = ts.config.starttop - y;

                var clienth = document.documentElement.clientHeight || document.body.clientHeight; //当前页面可视高度
                var clientw = document.documentElement.clientWidth || document.body.clientWidth; //当前页面可视高度
                //判断临界点
                ts.config.endleft = ts.config.endleft <= 0 ? 0 : ts.config.endleft;
                ts.config.endtop = ts.config.endtop <= 0 ? 0 : ts.config.endtop;
                if ((ts.config.endleft + ts.config.domw) >= clientw) {
                    ts.config.endleft = clientw - ts.config.domw;
                }
                if ((ts.config.endtop + ts.config.domh) >= clienth) {
                    ts.config.endtop = clienth - ts.config.domh;
                }
                ts.config.dom.style.left = ts.config.endleft + "px";
                ts.config.dom.style.top = ts.config.endtop + "px";
                ts.clearselect();
                //document.getElementById("span").innerText = ts.config.clientX + "," + e.clientX;
            },
            moveend: function () {
                var ts = this;
                ts.config.startleft = ts.config.endleft;//记录结束left位置
                ts.config.starttop = ts.config.endtop;//记录结束top位置
                document.onmousemove = null;
                document.onmouseup = null;
                return false;
            }
        }
        dra.init();
    </script>
</body>
</html>
时间: 2024-08-03 14:57:02

Javascript学习------拖拽效果的相关文章

js-特效部分学习-拖拽效果

一.客户区大小ClientWidth和ClientHeight <style> #box { width: 200px; height: 200px; background-color: aquamarine; margin: 20px; border: 20px solid red; padding:20px; } </style> </head> <body> <div id="box"> </div> <

Javascript:简单拖拽效果的实现

核心代码: /* *完成一个拖拽事件由三大事件组成: *1:onmousedown:选择元素 *2:onmousemove:移动元素 *3:onmouseup:释放元素 */ function drag(obj){ obj.onmousedown=function(ev){ var ev=ev || event; var disX=ev.clientX-this.offsetLeft; var disY=ev.clientY-this.offsetTop; //IE下选中文字后移动时,文字跟着移

用javaScript实现拖拽效果

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" con

jQuery的DOM操作实例(2)——拖拽效果&amp;&amp;拓展插件

一.原生JavaScript编写拖拽效果 二.jQuery编写的拖拽效果 三.在jQuery中拓展一个拖拽插件

学习笔记---Javascript事件Event、IE浏览器下的拖拽效果

学习笔记---Javascript事件Event.IE浏览器下的拖拽效果     1. 关于event常用属性有returnValue(是否允许事件处理继续进行, false为停止继续操作).srcElement(触发事件的事件源对象)和attachEvent("onclick",function(){...}); 2. a. 实现拖放(Drag and Drop): 目前支支持IE, 若定制某对象为可拖放对象, 则必须覆盖目标对象的dragenter和dragover事件, 可以用e

Createjs学习心得之使用EaselJs实现拖拽效果

寒假时跟着老师在做一个createjs+angularjs的html5应用app,因为在这之前完全没了解过createjs这个框架,所以在查找资料时发现,国外官网(http://www.createjs.com)API文档虽是详细,但对于一些英语不太好的童鞋(其实我也是一枚英语渣渣)就比较难理解了.而国内中文社区做的并不好,用户不多,资料翻译准确度不够.所以在这里,我就把我学习Createjs的一些心得体会向大家分享下: 一.什么是CreateJS? createjs是一个轻量级的javascr

WEB前端开发学习----11. JQuery 实现简单的拖拽效果

拖拽效果在网页中很常见.实现起来也不难.记录一下今天实现的简单效果. 拖拽演示 快速拖动时,会出现问题,以后修改. 说白了,就是3个点击事件. 1. 按下鼠标左键, 触发点击事件,此时记录下可以得到鼠标相对于拖动控件的位置(当前鼠标位置-控件位置): 2. 拖动鼠标,触发移动事件,可以计算出鼠标移动的距离(当前鼠标位置-之前算出的相对位置),也就是拖拽控件所移动的距离: 3. 鼠标抬起,结束拖动. 在JQ中,event.pageX    event.pageY可以获取鼠标的位置,相对于文档左上角

简单的鼠标拖拽效果(原生js实现)

之前在聊天群里看到有人说面试的时候被问到了怎样实现一个拖拽效果,当时看到后在心里默默思考了下,结果发现好像我也写不出来啊.本着遇到一个解决一个的思想,就亲自敲了一个,看到张鑫旭大神写的代码,真的很厉害,多多学习了,(感觉随便搜一个关于前端方面的问题都能看到他的网站,真是太佩服了,写了那么多文章,十分感谢.)好了,接下来就进入正题了.想实现一个效果首先得明白其中的逻辑,知道了实现逻辑后,就可以码代码了.首先我实现的效果是: 鼠标按下后,才可以执行后续效果 鼠标已经按下,然后鼠标移动,需要拖拽的元素

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" xml:lang="en"><head>    <meta