如何用JavaScript编写实现九宫格元素的拖动功能?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1001个文字,预计阅读时间需要5分钟。
本文以实例展示了如何使用JavaScript实现九宫格拖拽效果。以下是一段代码示例,供大家参考:
javascript// 九宫格拖拽效果实现function dragElement(event) { var element=event.target; var pos1=0, pos2=0, pos3=0, pos4=0; element.onmousedown=dragMouseDown;
function dragMouseDown(e) { e=e || window.event; e.preventDefault(); // 获取鼠标位置 pos3=e.clientX; pos4=e.clientY; document.onmouseup=closeDragElement; // 当鼠标移动时调用此函数 document.onmousemove=elementDrag; }
function elementDrag(e) { e=e || window.event; e.preventDefault(); // 计算新位置 pos1=pos3 - e.clientX; pos2=pos4 - e.clientY; pos3=e.clientX; pos4=e.clientY; // 设置元素位置 element.style.top=(element.offsetTop - pos2) + px; element.style.left=(element.offsetLeft - pos1) + px; }
function closeDragElement() { // 当鼠标释放时,移除事件监听器 document.onmouseup=null; document.onmousemove=null; }}
关于一些拼图游戏的效果,以下是一些常见做法:
1. 使用HTML和CSS制作拼图游戏界面,通过JavaScript实现拖拽、旋转等交互效果。
2.利用HTML5 Canvas或SVG进行拼图游戏的设计,实现更丰富的视觉效果。
3.使用第三方库,如jQuery、Vue.js等,简化拼图游戏的开发过程。
以下是一个简单的拼图游戏效果示例:
拼图游戏 .box { width: 100px; height: 100px; float: left; margin: 5px; background-color: #f0f0f0; cursor: pointer; }
以上代码实现了一个简单的拼图游戏,其中包含9个拼图块,通过拖拽将拼图块放置到正确的位置。
本文实例为大家分享了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>
这是效果图
虽说实现了效果,但我写的还是不太严谨,还有诸多bug,比如上边做边没距离,实际写的话还要加上这个距离,即使距离为0,还有就是我发现拖拽的时候,如果使用qq截图的话,克隆的那个小方块没办法消失,只得重新刷新页面,有没有大佬解决下。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持自由互联。
本文共计1001个文字,预计阅读时间需要5分钟。
本文以实例展示了如何使用JavaScript实现九宫格拖拽效果。以下是一段代码示例,供大家参考:
javascript// 九宫格拖拽效果实现function dragElement(event) { var element=event.target; var pos1=0, pos2=0, pos3=0, pos4=0; element.onmousedown=dragMouseDown;
function dragMouseDown(e) { e=e || window.event; e.preventDefault(); // 获取鼠标位置 pos3=e.clientX; pos4=e.clientY; document.onmouseup=closeDragElement; // 当鼠标移动时调用此函数 document.onmousemove=elementDrag; }
function elementDrag(e) { e=e || window.event; e.preventDefault(); // 计算新位置 pos1=pos3 - e.clientX; pos2=pos4 - e.clientY; pos3=e.clientX; pos4=e.clientY; // 设置元素位置 element.style.top=(element.offsetTop - pos2) + px; element.style.left=(element.offsetLeft - pos1) + px; }
function closeDragElement() { // 当鼠标释放时,移除事件监听器 document.onmouseup=null; document.onmousemove=null; }}
关于一些拼图游戏的效果,以下是一些常见做法:
1. 使用HTML和CSS制作拼图游戏界面,通过JavaScript实现拖拽、旋转等交互效果。
2.利用HTML5 Canvas或SVG进行拼图游戏的设计,实现更丰富的视觉效果。
3.使用第三方库,如jQuery、Vue.js等,简化拼图游戏的开发过程。
以下是一个简单的拼图游戏效果示例:
拼图游戏 .box { width: 100px; height: 100px; float: left; margin: 5px; background-color: #f0f0f0; cursor: pointer; }
以上代码实现了一个简单的拼图游戏,其中包含9个拼图块,通过拖拽将拼图块放置到正确的位置。
本文实例为大家分享了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>
这是效果图
虽说实现了效果,但我写的还是不太严谨,还有诸多bug,比如上边做边没距离,实际写的话还要加上这个距离,即使距离为0,还有就是我发现拖拽的时候,如果使用qq截图的话,克隆的那个小方块没办法消失,只得重新刷新页面,有没有大佬解决下。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持自由互联。

