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固定定位,绝对定位用父容器
相关文章
|
3天前
|
存储 JavaScript 前端开发
JavaScript实现记住用户名功能
JavaScript实现记住用户名功能
|
4天前
|
存储 JavaScript 前端开发
笔.COOL,一个功能完备、使用便捷的在线HTML/CSS/JS以及Vue编辑器和作品分享平台
笔.COOL是一个新兴的在线 HTML/CSS/JS 及 Vue 编辑器,提供实时预览和云端存储功能。用户可以随时随地编写和保存代码,同时分享作品给他人预览和学习。它也是一个实用的 BUG 复现工具,支持嵌入编辑器到博客,促进代码交流。社区活跃,适合开发者展示作品、获取灵感和学习。
|
17天前
|
JavaScript 前端开发 测试技术
编写JavaScript模块化代码主要涉及将代码分割成不同的文件或模块,每个模块负责处理特定的功能或任务
【5月更文挑战第10天】编写JavaScript模块化代码最佳实践:使用ES6模块或CommonJS(Node.js),组织逻辑相关模块,避免全局变量,封装细节。利用命名空间和目录结构,借助Webpack处理浏览器环境的模块。编写文档和注释,编写单元测试以确保代码质量。通过这些方法提升代码的可读性和可维护性。
22 3
|
17天前
|
JavaScript 前端开发
JavaScript实现识别二维码信息功能
JavaScript实现识别二维码信息功能
14 1
|
17天前
|
JavaScript
js实现全屏功能——易懂版
js实现全屏功能——易懂版
12 0
|
17天前
|
JavaScript 前端开发 API
如何利用JavaScript和Electron构建具有丰富功能的桌面应用
【4月更文挑战第30天】如何利用JavaScript和Electron构建具有丰富功能的桌面应用
9 0
|
17天前
|
JavaScript 前端开发
实现一个JavaScript动态日期功能
实现一个JavaScript动态日期功能
|
17天前
|
JavaScript 前端开发
JavaScript模糊搜索功能
JavaScript模糊搜索功能
|
17天前
|
JavaScript 前端开发
JavaScript三级联动功能
JavaScript三级联动功能
|
17天前
|
JavaScript
JS实现分页功能
JS实现分页功能