js实现拖拽功能

简介: js实现拖拽功能
<div class="box no_copy">
            <span>移动盒子</span>
        </div>
html,body{
                margin:0;
                padding:0;
            }
            .box{
                position:fixed;
                width:100px;
                line-height:100px;
                text-align:center;
                white-space: nowrap;
                background: #eee;
                border:5px solid #aaa;
                cursor: move;
                box-sizing: border-box;/*必须包含边框,防止多了个边框的缝隙*/
            }
            .box>span{
                display: inline-block;
                height:100px;
            }
//container:拖动的元素
    //box;容器。是否限制在某个容器内拖动,不传代表不限制
    function dragMoveX(container,box) {
        var flag;
        var offsetX,offsetY;
        var w=$(box).width();
        var h=$(box).height();
        var boxW=$(container).width();
        var boxH=$(container).height();
        //鼠标按下
        $(document).on("mousedown", container, function (event) {
            flag = true;
            offsetX = event.offsetX;
            offsetY = event.offsetY;
        });
        //鼠标移动
        $(document).on("mousemove", function (event) {
            if (flag) {
                var moveX = event.clientX;
                var moveY = event.clientY;
                let toX=moveX-offsetX;
                let toY=moveY-offsetY;
                if(box){
                    //小于左边0
                    if(toX<0){
                        $(container).css('left','0px')
                    }else if(toX>w-boxW){
                        $(container).css('left',(w-boxW)+'px')
                    }else{
                        $(container).css('left',toX+'px')
                    }
                    if(toY<0){
                        $(container).css('top','0px')
                    }else if(toY>h-boxH){
                        $(container).css('top',(h-boxH)+'px')
                    }else{
                        $(container).css('top',toY+'px')
                    }
                }else{
                    $(container).css('left',toX+'px')
                    $(container).css('top',toY+'px')
                }            
            }
        });
        //鼠标释放
        $(container).on("mouseup", function () {
            flag = false;
        });
        //鼠标释放
        $(document).on("mouseup", function () {
            flag = false;
        });
        /**
         * 注意:与 mouseout 事件不同,mouseleave 事件只有在鼠标指针离开被选元素时被触发,mouseout 事件在鼠标指针离开任意子元素时也会被触发。参见页面底部演示实例。
         * 所以:如果mouseout的子元素存在溢出,并添加了超出加滚动,那么刚进入也会触发该事件,所以这里就不能使用。
         * */
        //鼠标移出元素
        $(container).on("mouseleave", function (event) {
            if (event.pageX < 0 || event.pageX > document.body.offsetWidth) {
                flag = false;
            }         
        });
    }
    dragMoveX(".box",document);//document针对fixed固定定位,绝对定位用父容器
相关文章
|
1月前
|
JavaScript 前端开发
JavaScript分页功能
JavaScript分页功能
|
16天前
|
JavaScript
js实现简洁实用的网页计算器功能源码
这是一款使用js实现简洁实用的网页计算器功能源码。可实现比较基本的加减乘除四则运算功能,界面简洁实用,是一款比较基本的js运算功能源码。该源码可兼容目前最新的各类主流浏览器。
24 2
|
1月前
|
人工智能 JavaScript 网络安全
ToB项目身份认证AD集成(三完):利用ldap.js实现与windows AD对接实现用户搜索、认证、密码修改等功能 - 以及针对中文转义问题的补丁方法
本文详细介绍了如何使用 `ldapjs` 库在 Node.js 中实现与 Windows AD 的交互,包括用户搜索、身份验证、密码修改和重置等功能。通过创建 `LdapService` 类,提供了与 AD 服务器通信的完整解决方案,同时解决了中文字段在 LDAP 操作中被转义的问题。
|
1月前
|
JavaScript 前端开发 API
|
1月前
|
JavaScript API UED
vue.js怎么实现全屏显示功能
【10月更文挑战第7天】
22 1
|
1月前
|
资源调度 JavaScript UED
如何使用Vue.js实现单页应用的路由功能
【10月更文挑战第1天】如何使用Vue.js实现单页应用的路由功能
|
1月前
|
JavaScript 搜索推荐
JS中的模糊查询功能
JS中的模糊查询功能
29 1
|
1月前
|
前端开发 JavaScript
使用 JavaScript 实现图片预览功能
使用 JavaScript 实现图片预览功能
29 0
|
1月前
|
JavaScript 安全 前端开发
js实现复制功能
js实现复制功能
19 0
用html+javascript打造公文一键排版系统14:为半角和全角字符相互转换功能增加英文字母、阿拉伯数字、标点符号、空格选项
用html+javascript打造公文一键排版系统14:为半角和全角字符相互转换功能增加英文字母、阿拉伯数字、标点符号、空格选项
下一篇
无影云桌面