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 formValidator表单验证插件开源了 含API帮助、源码、示例
Aug 14 Javascript
js 动态修改css文件用到了cssRule
Aug 20 Javascript
jQuery中scrollLeft()方法用法实例
Jan 16 Javascript
Javascript验证Visa和MasterCard信用卡号的方法
Jul 27 Javascript
Node.js巧妙实现Web应用代码热更新
Oct 22 Javascript
javascript中闭包(Closure)详解
Jan 06 Javascript
jquery表单验证实例仿Toast提示效果
Mar 03 Javascript
JavaScript简介_动力节点Java学院整理
Jun 26 Javascript
浅谈Node.js 中间件模式
Jun 12 Javascript
详解ES6 CLASS在微信小程序中的应用实例
Apr 24 Javascript
vue2.0 解决抽取公用js的问题
Jul 31 Javascript
vue绑定数字类型 value为数字的实例
Aug 31 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实现Mysql读写分离
2013/06/28 PHP
destoon实现调用自增数字从1开始的方法
2014/08/21 PHP
PHP基于imagick扩展实现合成图片的两种方法【附imagick扩展下载】
2017/11/14 PHP
PHP中通过getopt解析GNU C风格命令行选项
2019/11/18 PHP
一个用javascript写的select支持上下键、首字母筛选以及回车取值的功能
2009/09/09 Javascript
字段太多jquey快速清空表单内容方法
2014/08/21 Javascript
js实现在同一窗口浏览图片
2014/09/17 Javascript
由ReactJS的Hello world说开来
2015/07/02 Javascript
js从外部获取图片的实现方法
2016/08/05 Javascript
解析NodeJs的调试方法
2016/12/11 NodeJs
Vue.js学习示例分享
2017/02/05 Javascript
JavaScript方法_动力节点Java学院整理
2017/06/28 Javascript
js图片放大镜实例讲解(必看篇)
2017/07/17 Javascript
详解vue渲染函数render的使用
2017/12/12 Javascript
浅谈webpack4 图片处理汇总
2018/09/12 Javascript
element-ui上传一张图片后隐藏上传按钮功能
2019/05/22 Javascript
详解vue-cli3多页应用改造
2019/06/04 Javascript
浅谈Webpack4 Tree Shaking 终极优化指南
2019/11/18 Javascript
[17:45]DOTA2 HEROES教学视频教你分分钟做大人-军团指挥官
2014/06/11 DOTA
[48:48]完美世界DOTA2联赛PWL S3 Magama vs GXR 第一场 12.19
2020/12/24 DOTA
Python如何快速上手? 快速掌握一门新语言的方法
2017/11/14 Python
Python pip替换为阿里源的方法步骤
2019/07/02 Python
Python字符串处理的8招秘籍(小结)
2019/08/13 Python
python mqtt 客户端的实现代码实例
2019/09/25 Python
tensorflow实现tensor中满足某一条件的数值取出组成新的tensor
2020/01/04 Python
Python模块的定义,模块的导入,__name__用法实例分析
2020/01/07 Python
MCM英国官网:奢侈皮具制品
2017/04/18 全球购物
美国背景检查、公共记录和人物搜索网站:BeenVerified
2018/02/25 全球购物
俄罗斯珠宝市场的领导者之一:Бронницкий ювелир
2019/10/02 全球购物
文秘专业自荐信
2013/10/14 职场文书
商务考察邀请函范文
2014/01/21 职场文书
求职信结尾怎么写
2014/05/26 职场文书
学生党员公开承诺书
2014/05/28 职场文书
幼儿园六一儿童节演讲稿
2015/03/19 职场文书
交通事故起诉书
2015/05/19 职场文书
kubernetes集群搭建Zabbix监控平台的详细过程
2022/07/07 Servers