元素拖动

元素拖动涉及事件:mousedown,mousemove,mouseup  思路:鼠标按下点M1和移动后鼠标点M2的距离与元素开始时的left和移动后的left之间的距离是相同的:      1)鼠标按下时,计算鼠标坐标与元素left/top之间的距离disX/disY;      2)鼠标移动时,使用鼠标坐标减去disX和disY,就时元素的left和top值;注意:    1)元素拖动速度过快时,鼠标脱离元素内,会导致拖动中断或不连续:将move和up事件作用于document对象    2)img元素拖动时会有默认行为,会导致效果无法达到预期:在down事件的最后使用return false阻止掉默认行为    3)元素中间存在文本时,在ie浏览器上选中文本时会导致拖拽有问题:在down事件中使用setCapture全局捕获(生成一个透明的层),在up事件中使用releaseCapture释放全局捕获(setCapture该法是IE浏览器专有)
<body>
  <div class="drag-box">我是足球标题</div>
  <img src="img/ball.jpg" class="drag-box"  style="display: none">
</body>
<style>
    .drag-box{position:absolute;width: 210px;height: 210px; background:url("img/ball.jpg") no-repeat;text-align: center}
</style>
window.onload = function () {
        var dragBox = document.getElementsByClassName(‘drag-box‘)[0];
        var disX = 0;
        var disY = 0;

        //鼠标按下drag-box
        dragBox.onmousedown = function (ev) {
            var ev = ev || window.event;
            disX = ev.clientX - dragBox.offsetLeft;
            disY = ev.clientY - dragBox.offsetTop;

            //IE:全局捕获
            if(dragBox.setCapture){
                dragBox.setCapture();
            }

            //鼠标按下并拖动drag-box
            document.onmousemove = function (ev) {
                var L = ev.clientX - disX;
                var T = ev.clientY - disY;

                dragBox.style.left = L + ‘px‘;
                dragBox.style.top = T + ‘px‘;
            };
            //鼠标松开,清除mouseMove和mouseUp事件
            document.onmouseup = function (ev) {
                document.onmousemove = null;
                document.onmouseup = null;
                //IE:释放全局捕获
                if(dragBox.releaseCapture){
                    dragBox.releaseCapture();
                }
            };
            //阻止img元素的默认行为
            return false;
        };
    }
时间: 2025-01-06 05:03:35

元素拖动的相关文章

实现dom元素拖动

本文主要写一下如何实现dom元素拖动,目前使用jquery库实现之. 主要的注释附在代码中,大家可以根据代码画一个小的窗口模型图,以便于理解. 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <title>实现dom元素拖动</title> 6 <style> 7 .dialog { 8 position: absolute;

hmtl 手机上 div元素 拖动

这是前端一个非常简单的功能,没什么复杂的原理:给div元素添加touch监听事件,然后改变div元素的位置状态. 下面是段简单的实现代码 <!doctype html> <html> <head> <meta charset="UTF-8"> <meta content="width=device-width,initial-scale=1.0,maximum-scale=1.0" name="view

html5元素拖动 (转载黑桐)

HTML5 元素拖动 1.拖动元素img的相关设置: 设置元素可以拖动属性 draggable="true" 设置元素被拖动时触发的事件 ondragstart="drag(event)" 图片元素可拖动的完整代码 HTML: <img id="drag1" src="images/ycbt1.JPG" draggable="true" ondragstart="drag(event)&qu

HTML5 元素拖动

1.拖动元素img的相关设置: 设置元素可以拖动属性 draggable="true" 设置元素被拖动时触发的事件 ondragstart="drag(event)" 图片元素可拖动的完整代码 HTML: <img id="drag1" src="images/ycbt1.JPG" draggable="true" ondragstart="drag(event)" /> J

HTML5 元素拖动 - 实现元素左右拖动, 或更改自身排序

1.拖放(Drag 和 drop)是 HTML5 标准的组成部分. 拖放是一种常见的特性,即抓取对象以后拖到另一个位置.在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放. 浏览器支持:Internet Explorer 9.Firefox.Opera 12.Chrome 以及 Safari 5 支持拖放(注:在 Safari 5.1.2 中不支持拖放.). 2.相关属性及方法  设置元素为可拖放,把 draggable 属性设置为 true <labeldraggable="tr

Winform ListView 元素拖动

//ListView 属性 /* AllowDrop : True */ ListView objLVDrag; private void listView_DragDrop(object sender, DragEventArgs e) { //获取拖动的数据项创建数组 ListView.SelectedListViewItemCollection items = e.Data.GetData("wjshan0808") as ListView.SelectedListViewIte

HTML5拖动画布/拖放

<!DOCTYPE HTML> <html> <head> <script type="text/javascript"> function allowDrop(ev){ ev.preventDeafault(); } function drag(ev){ ev.dataTranster.setData("Text",ev.target.id); } function drop(ev){ var data=ev.dat

jQuery Easy UI Draggable(拖动)组件

上文已经提到过了 jQuery EasyUI插件引用一般我们常用的有两种方式(排除easyload加载方式),所以本篇要总结的Draggable组件同样有两种方式加载: (1).使用class加载方式: <div id="box" class="easyui-draggable" style="width:400px;height:200px;background:red;"> 内容部分 </div> (2).JS 加载调

可拖动的DIV

在做WEB UI设计的时候,拖动某个HTML元素已经成为一种不能忽视的用户界面模式,比较典型的应用例子就是Dialog,一个元素是怎么实现拖动的呢?其实原理非常简单,要想实现首先得了解几个基本知识. Tips 绝对定位:只有把元素的position属性设置为absolute并且或者fixed才可以实现拖动,默认情况下元素会按文档流中的位置自行决定其出现在页面上的位置,是不能移动的,而绝对定位的元素可以使元素脱离文档流,相对于其定位的父元素或者屏幕定位,可以利用这点儿,通过改变元素与已定位父元素的