JavaScript实现九宫格拖拽效果


Posted in Javascript onJune 28, 2022

本文实例为大家分享了JavaScript实现九宫格拖拽效果的具体代码,供大家参考,具体内容如下

关于一些拼图游戏什么的,见人家效果做的不错,参考下别人写的代码,我也尝试着做了个。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            body{
                margin: 0;
                padding: 0;
            }
            #wrap{
                position: relative;
            }
            #wrap div{
                position: absolute;
                width: 100px;
                height: 100px;
                font-size: 50px;
                text-align: center;
                line-height: 100px;
                border-radius: 10px;
            }
        </style>
    </head>
    <body>
        <div id="wrap"></div>
        <script type="text/javascript">
            //生成结构
            var oWrap = document.getElementById("wrap");
            var mt = ml = 10;
            for(var i = 0; i < 3; i++){
                for(var j = 0; j < 3; j++){
                    var oDiv = document.createElement("div");
                    oWrap.appendChild(oDiv);
                    oDiv.style.top = i*(oDiv.offsetHeight + mt) + "px";
                    oDiv.style.left = j*(oDiv.offsetWidth + ml) + "px";
                    oDiv.style.backgroundColor = "rgb("+Math.floor(Math.random()*256)+","+Math.floor(Math.random()*256)+","+Math.floor(Math.random()*256)+")"
                }
            }
            
            var arr = "ABCDEFGHI";
            
            var aItems = oWrap.children;
            var len = aItems.length;
            
            for(var i = 0; i < aItems.length; i++){
                aItems[i].innerHTML = arr[i];
            }
            //拖拽及交换位置
            
            for(var i = 0; i < aItems.length; i++){
                aItems[i].onmousedown = function(e){
                    var evt = e || event;
                    var x = evt.offsetX;
                    var y = evt.offsetY;
                    /*var x = evt.clientX - this.offsetLeft - oWrap.offsetLeft;
                    var y = evt.clientY - this.offsetTop - oWrap.offsetTop;*/
                    var _this = this;
                    
                    var cloneNode = this.cloneNode();
                    cloneNode.style.border = '1px dashed #cecece';
                    this.style.zIndex = 1;
                    oWrap.replaceChild(cloneNode,this);
                    oWrap.appendChild(this);
                    
                    document.onmousemove = function(e){
                        var evt = e || event;
                        var _left = evt.clientX - x - oWrap.offsetLeft;
                        var _top = evt.clientY - y - oWrap.offsetTop;
                        _this.style.left = _left + "px";
                        _this.style.top = _top + "px";
                        
                        return false;
                    }
                    
                    document.onmouseup = function(){
                        
                        //交换位置
                        var disArr = [];
                        var newArr = [];
                        console.log(aItems.length);
                        for(var i = 0; i < len; i++){
                            var disX = _this.offsetLeft - aItems[i].offsetLeft;
                            var disY = _this.offsetTop - aItems[i].offsetTop;
                            var dis = Math.sqrt(Math.pow(disX,2)+Math.pow(disY,2));
                            disArr.push(dis);
                            newArr.push(dis);
                        }
                        disArr.sort(function(a,b){
                            return a-b;
                        })
                        var minIndex = newArr.indexOf(disArr[0]);
                        
                        _this.style.left = aItems[minIndex].style.left;
                        _this.style.top = aItems[minIndex].style.top;
                        aItems[minIndex].style.left = cloneNode.style.left;
                        aItems[minIndex].style.top = cloneNode.style.top;
                        oWrap.removeChild(cloneNode);
                        document.onmousemove = null;
                        document.onmouseup = null;
                    }
                }
            }
            /*var arr = [45,32,11,90];
            var minVal = Math.min.apply(null,arr);
            var minIndex = arr.indexOf(minVal);
            console.log(minVal,arr,minIndex);*/
        </script>
    </body>
</html>

这是效果图

JavaScript实现九宫格拖拽效果

虽说实现了效果,但我写的还是不太严谨,还有诸多bug,比如上边做边没距离,实际写的话还要加上这个距离,即使距离为0,还有就是我发现拖拽的时候,如果使用qq截图的话,克隆的那个小方块没办法消失,只得重新刷新页面,有没有大佬解决下。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。


Tags in this post...

Javascript 相关文章推荐
JavaScript图片放大技术(放大镜)实现代码分享
Nov 14 Javascript
JavaScript操作URL的相关内容集锦
Oct 29 Javascript
深入理解jQuery中的事件冒泡
May 24 Javascript
关于JS 预解释的相关理解
Jun 28 Javascript
js获取地址栏中传递的参数(两种方法)
Feb 08 Javascript
浅谈angularJS的$watch失效问题的解决方案
Aug 11 Javascript
JavaScript实现的DOM树遍历方法详解【二叉DOM树、多叉DOM树】
May 07 Javascript
解决vue 按钮多次点击重复提交数据问题
May 10 Javascript
微信小程序实现默认第一个选中变色效果
Jul 17 Javascript
基于Vue-Cli 打包自动生成/抽离相关配置文件的实现方法
Dec 09 Javascript
vue+flask实现视频合成功能(拖拽上传)
Mar 04 Vue.js
使用Cargo工具高效创建Rust项目
Aug 14 Javascript
JS实现简单九宫格抽奖
Jun 28 #Javascript
Vite + React从零开始搭建一个开源组件库
Jun 25 #Javascript
React自定义hook的方法
Jun 25 #Javascript
小程序实现侧滑删除功能
Jun 25 #Javascript
小程序自定义轮播图圆点组件
Jun 25 #Javascript
微信小程序实现轮播图指示器
Jun 25 #Javascript
create-react-app开发常用配置教程
Jun 25 #Javascript
You might like
PHP屏蔽蜘蛛访问代码及常用搜索引擎的HTTP_USER_AGENT
2013/03/06 PHP
关于初学PHP时的知识积累总结
2013/06/07 PHP
php使用function_exists判断函数可用的方法
2014/11/19 PHP
学习php设计模式 php实现桥梁模式(bridge)
2015/12/07 PHP
orm获取关联表里的属性值
2016/04/17 PHP
PHP微信开发之模板消息回复
2016/06/24 PHP
PHP自定义函数实现数组比较功能示例
2017/10/19 PHP
PHP定义字符串的四种方式详解
2018/02/06 PHP
php文件包含的几种方式总结
2019/09/19 PHP
详解将数据从Laravel传送到vue的四种方式
2019/10/16 PHP
jquery 插件 任意位置浮动固定层
2008/12/25 Javascript
在javascript中执行任意html代码的方法示例解读
2013/12/25 Javascript
解决JS中乘法的浮点错误的方法
2014/01/03 Javascript
简单理解vue中el、template、replace元素
2016/10/27 Javascript
搭建Bootstrap离线文档的方法
2016/12/02 Javascript
JavaScript基于DOM操作实现简单的数学运算功能示例
2017/01/16 Javascript
js实现tab切换效果
2017/02/16 Javascript
微信小程序 出现47001 data format error原因解决办法
2017/03/10 Javascript
Nodejs中使用phantom将html转为pdf或图片格式的方法
2017/09/18 NodeJs
JS中Map和ForEach的区别
2018/02/05 Javascript
ES6基础之解构赋值(destructuring assignment)
2019/02/21 Javascript
一文快速详解前端框架 Vue 最强大的功能
2019/05/21 Javascript
python多线程threading.Lock锁用法实例
2014/11/01 Python
Python爬虫之正则表达式基本用法实例分析
2018/08/08 Python
Python实现微信小程序支付功能
2019/07/25 Python
django之静态文件 django 2.0 在网页中显示图片的例子
2019/07/28 Python
python selenium操作cookie的实现
2020/03/18 Python
杭州SQL浙江浙大网新恩普软件有限公司
2013/07/27 面试题
中英文求职信范文
2014/01/27 职场文书
劳动实践课感言
2014/02/01 职场文书
财产公证书格式
2014/04/10 职场文书
企业演讲稿范文大全
2014/05/20 职场文书
社区助残日活动总结
2014/08/29 职场文书
个人遵守党的政治纪律情况对照检查材料思想汇报
2014/09/25 职场文书
故意伤害辩护词
2015/05/21 职场文书
Vue全家桶入门基础教程
2021/05/14 Vue.js