原生js实现 拖拽事件

<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            .box {
                width: 200px;
                height: 200px;
                background-color: #000000;
                position: absolute;
                left: 0;
                top: 0;
                color: #FFFFFF;
                line-height: 200px;
                font-size: 20px;
                cursor: move;
            }
        </style>
    </head>

    <body>
        <div id="box" class="box">
            拖拽事件,文字选中
        </div>
        <script type="text/javascript">
            window.onload = function() {
                var oBox = document.getElementById("box");
                //修正文字选中问题
                oBox.onselectstart = function() {
                    return false;
                }
                oBox.ondragstart = function() {
                    return false;
                }
                oBox.onmousedown = function(e) {
                    var top = this.offsetTop;
                    var left = this.offsetLeft;
                    //起点
                    var originX = e.clientX;
                    var originY = e.clientY;
                    document.onmousemove = function(e) {
                        var endX = e.clientX;
                        var endY = e.clientY;
                        //X轴、Y轴移动距离
                        var distanceX = endX - originX;
                        var distanceY = endY - originY;

                        oBox.style.left = (left + distanceX) + "px";
                        oBox.style.top = (top + distanceY) + "px";
                    }
                }
                //移除move事件
                document.onmouseup = function() {
                    document.onmousemove = null;
                }
                //鼠标移动mouseover
                oBox.onmousemove = function(e) {
                    //box宽度高度
                    var width = this.offsetWidth;
                    var height = this.offsetHeight;
                    //box的top/left
                    var top = this.offsetTop;
                    var left = this.offsetLeft;
                    //鼠标坐标
                    var mouseX = e.clientX;
                    var mouseY = e.clientY;
                    //最大坐标X,最大坐标Y
                    var maxX = left + width;
                    var maxY = top + height;
                    if(maxX - mouseX < 10 && maxY - mouseY < 10) {
                        this.style.cursor = "nw-resize";
                    } else {
                        this.style.cursor = "move";
                    }

                }

            }
        </script>

    </body>

</html>

原文地址:https://www.cnblogs.com/150536FBB/p/9787419.html

时间: 2024-08-16 18:49:41

原生js实现 拖拽事件的相关文章

原生js实现拖拽效果

css样式布局: html部分: js主体部分: 接下来用混合继承实现box2移动时有边界的效果: 思路:1.实现拖拽效果主要有三个事件,当鼠标按下的时候,获取鼠标相对于事件发生元素的位置(offsetX/offsetY);当鼠标移动的时候,利用鼠标指针相对于浏览器页面(或客户区)的坐标(clientX/clientY),得到元素的left和top值(clientX/clientY-offsetX/offsetY):当鼠标抬起的时候清除移动效果. 2.事件处理函数会使this指向触发事件的元素,

原生js实现拖拽弹框的效果

研究了一上午,模仿了拖拽弹框的效果,小有成就 <script type="text/javascript"> function getByClass(classname,parent){ var par=parent||document, eles=par.getElementsByTagName("*"), needArr=[]; for(var i=0;i<eles.length;i++){ if(eles[i].className==clas

原生js实现拖拽功能

如果要设置物体拖拽,必须使用三个事件,分别是: 1.onmousedown:鼠标按下事件 2.onmousemove:鼠标移动事件 3.onmouseup:鼠标抬开事件 拖拽的原理:根据鼠标的移动来移动被拖拽的元素.鼠标的移动就是鼠标x.y坐标的变化,元素的移动就是position的top和left的变化. 当然并不是任何时候移动鼠标都要使元素移动,应该判断鼠标左键是否被按下,以及是否在可拖拽元素上按下的. 基本思路: 拖拽状态 = 0鼠标在元素上按下的时候{ 拖拽状态 = 1 记录下鼠标的x和

原生js 封装 拖拽限制范围

<div id="div1"></div><div id="div2"></div> window.onload = function() { var div1 = document.getElementById('div1'); var div2 = document.getElementById('div2'); drag(div1); drag(div2); } function drag(obj) { obj.

JS Event 鼠标拖拽事件

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

Duilib嵌入CEF禁止浏览器响应拖拽事件

在开发中有一个需求,拖拽外部文件到客户端,然后客户端响应WM_DROPFILES消息,在拖拽消息里处理一下业务,最后把处理结果显示到客户区html中,但实际中发现当拖拽文件到客户区,浏览器首先处理了拖拽事件,外层的Win32窗口无法捕捉到拖拽消息,因此要想实现此操作,刚开始我想了一个本办法,在客户区最外层罩了一个透明的Win32原生窗口,这样拖拽文件时,在最外层透明窗口的WM_DROPFILES消息中处理具体业务,最后用C++调用js函数,在页面显示处理结果. 方法一: 透明窗口 Layered

HTML5 02. 多媒体控件、拖拽事件、历史记录、web存储、应用程序缓存、地理定位、网络状态

多媒体 video:是行内块(text-align: center; 对行内块适用) <figure></figure>: 多媒体标签 : <figcaption></figcaption>: 多媒体标题 方法: load() 加载.play()播放.pause()暂停 属性: currentTime 视频播放的当前进度. duration:视频的总时间. paused:视频播放的状态 事件:   oncanplay:事件在用户可以开始播放视频/音频(aud

原生API实现拖拽上传文件实践

功能: 拖拽上传文件.图片,上传的进度条,能够同时上传多个文件. 完整的demo地址:https://github.com/qcer/FE-Components/tree/master/QDrag 涉及到的API: 1.HTML5的拖拽事件:dragenter,dragover,drop等 2.XMLHttpRequest  Level2 3.FormData 4.(扩展:HTML5的File API) 概述: 1.利用拖拽实践的API将一个普通的div自定义成一个放置目标,这里有一个技巧是放置

用js实现拖拽功能

平常我们在网上可以看到,按住一张图片,然后拖到另一处去,前天在网上看石川(Blue)老师 的js课堂,有见过这个,写下来与大家分享一下: 1,先画个div小红块,样式设置如下: #div1{width: 200px; height: 200px; background-color: red; position:absolute;} 这里的positon属性很重要,如果没有这个,根本拖不动你可以试一下. 2,然后需要用到三个事件,onmousedown, onmousemove, onmouseu