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 css styleFloat和cssFloat
Mar 15 Javascript
使用jQuery轻松实现Ajax的实例代码
Aug 16 Javascript
jQuery 表单验证扩展代码(一)
Oct 11 Javascript
js中浮点型运算BUG的解决方法说明
Jan 06 Javascript
JavaScript实现页面5秒后自动跳转的方法
Apr 16 Javascript
javascript实现动态表头及表列的展现方法
Jul 14 Javascript
jQuery实现的简单动态添加、删除表格功能示例
Sep 21 jQuery
详解webpack提取第三方库的正确姿势
Dec 22 Javascript
vue-router的HTML5 History 模式设置
Sep 08 Javascript
vue axios数据请求get、post方法及实例详解
Sep 11 Javascript
angular4笔记系列之内置指令小结
Nov 09 Javascript
通过高德地图API获得某条道路上的所有坐标用于描绘道路的方法
Aug 24 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实现的折半查找算法示例
2017/12/19 PHP
ExtJS 2.0 实用简明教程之布局概述
2009/04/29 Javascript
JQuery的Alert消息框插件使用介绍
2010/10/09 Javascript
JavaScript高级程序设计 读书笔记之十一 内置对象Global
2012/03/07 Javascript
jQuery创建平滑的页面滚动(顶部或底部)
2013/02/26 Javascript
JS等比例缩小图片尺寸的实例
2013/02/27 Javascript
JS判断是否360安全浏览器极速内核的方法
2015/01/29 Javascript
Jquery中offset()和position()的区别分析
2015/02/05 Javascript
js实现网页抽奖实例
2015/08/05 Javascript
Jquery 效果使用详解
2015/11/23 Javascript
图解js图片轮播效果
2015/12/20 Javascript
使用Jasmine和Karma对AngularJS页面程序进行测试
2016/03/05 Javascript
node.js学习之base64编码解码
2016/10/21 Javascript
JavaScript注册时密码强度校验代码
2017/06/30 Javascript
微信小程序实现获取小程序码和二维码java接口开发
2019/03/29 Javascript
vue实现表格合并功能
2020/12/01 Vue.js
[02:01]BBC DOTA2国际邀请赛每日综述:八强胜者组鏖战,中国队喜忧参半
2014/07/19 DOTA
[01:28]国服启动器接入蒸汽平台操作流程视频
2021/03/11 DOTA
跟老齐学Python之玩转字符串(2)
2014/09/14 Python
python实现聊天小程序
2018/03/13 Python
pycharm远程linux开发和调试代码的方法
2018/07/17 Python
Python读取stdin方法实例
2019/05/24 Python
python实现在多维数组中挑选符合条件的全部元素
2019/11/26 Python
TensorFlow绘制loss/accuracy曲线的实例
2020/01/21 Python
python之随机数函数的实现示例
2020/12/30 Python
html5 offlline 缓存使用示例
2013/06/24 HTML / CSS
意大利比基尼品牌:MISS BIKINI
2019/11/02 全球购物
华为慧通笔试题
2016/04/22 面试题
应届生会计求职信
2013/11/11 职场文书
公司股权转让协议书
2014/04/12 职场文书
党员活动总结
2015/02/04 职场文书
大雁塔英文导游词
2015/02/10 职场文书
2015年读书月活动总结
2015/03/26 职场文书
2016国庆节67周年红领巾广播稿
2015/12/18 职场文书
golang 实现两个结构体复制字段
2021/04/28 Golang
Springboot集成阿里云OSS上传文件系统教程
2021/06/28 Java/Android