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 相关文章推荐
jquery里的each使用方法详解
Dec 22 Javascript
jquery选择器的选择使用及性能介绍
Jan 16 Javascript
jquery mobile实现拨打电话功能的几种方法
Aug 05 Javascript
JavaScript 不支持 indexof 该如何解决
Mar 30 Javascript
微信小程序  自定义创建详细介绍
Oct 27 Javascript
video.js使用改变ui过程
Mar 05 Javascript
Javascript中字符串相关常用的使用方法总结
Mar 13 Javascript
利用node.js+mongodb如何搭建一个简单登录注册的功能详解
Jul 30 Javascript
利用JS判断客户端类型你应该知道的四种方法
Dec 22 Javascript
浅谈Webpack多页应用HMR卡住问题
Apr 24 Javascript
js设置默认时间跨度过程详解
Jul 17 Javascript
Layui弹框中数据表格中可双击选择一条数据的实现
May 06 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 来访国内外IP判断代码并实现页面跳转
2009/12/18 PHP
从手册去理解分析PHP session机制
2011/07/17 PHP
php操作SVN版本服务器类代码
2011/11/27 PHP
Linux下CoreSeek及PHP扩展模块的安装
2012/09/23 PHP
无需重新编译php加入ftp扩展的解决方法
2013/02/07 PHP
PHP中Http协议post请求参数
2015/11/02 PHP
JavaScript 版本自动生成文章摘要
2008/07/23 Javascript
精心挑选的15个jQuery下拉菜单制作教程
2012/06/15 Javascript
函数window.open实现关闭所有的子窗口
2015/08/03 Javascript
jquery实现右侧栏菜单选择操作
2016/03/04 Javascript
JavaScript数组方法大全(推荐)
2016/07/05 Javascript
jQuery 出现Cannot read property ‘msie’ of undefined错误的解决方法
2016/11/23 Javascript
Node.js读取文件内容示例
2017/03/07 Javascript
javascript数组去重常用方法实例分析
2017/04/11 Javascript
JavaScript实现图片懒加载的方法分析
2018/07/05 Javascript
layer.confirm取消按钮绑定事件的方法
2018/08/17 Javascript
js+springMVC 提交数组数据到后台的实例
2019/09/21 Javascript
javascript的delete运算符知识点总结
2019/11/19 Javascript
[01:31:22]Ti4 循环赛第四日附加赛LGD vs Mouz
2014/07/13 DOTA
[51:26]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#3Secret VS OG第二局
2016/03/03 DOTA
Python datetime时间格式化去掉前导0
2014/07/31 Python
python生成IP段的方法
2015/07/07 Python
用Python的Flask框架结合MySQL写一个内存监控程序
2015/11/07 Python
python实现简单flappy bird
2018/12/24 Python
python禁用键鼠与提权代码实例
2019/08/16 Python
python raise的基本使用
2020/09/10 Python
CSS3自定义滚动条样式 ::webkit-scrollbar的示例代码详解
2020/06/01 HTML / CSS
波兰在线运动商店:YesSport
2020/07/23 全球购物
匡威俄罗斯官网:Converse俄罗斯
2020/05/09 全球购物
会计专业个人自我鉴定
2014/03/21 职场文书
乡镇安全生产目标责任书
2014/07/23 职场文书
普通党员对照检查材料
2014/09/24 职场文书
卖房协议书样本
2014/10/30 职场文书
地道战观后感300字
2015/06/04 职场文书
2015年高中生国庆节演讲稿
2015/07/30 职场文书
将Python代码打包成.exe可执行文件的完整步骤
2021/05/12 Python