九宫格(纯原生)

九宫格(纯原生)

 

 九宫格(纯原生)

 

 九宫格(纯原生)

 

 九宫格(纯原生)

 

 九宫格(纯原生)

 

 九宫格(纯原生)

 

 

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>九宫格</title> <style> *{             margin:0;             padding:0;         }         #ulId{             width:600px;             height:600px;             border:1px solid black;             position:relative;             margin:100px auto;             list-style:none;         }         #ulId li{             width:200px;             height:200px;             position:absolute;             border:1px solid black;             box-sizing:border-box;             background:url(img/1.jpg);             background-size:600px 600px;         }         #ulId li:nth-child(1){             left:0px;             top:0px;             background-position:0px 0px;         }         #ulId li:nth-child(2){             left:200px;             top:0px;             background-position:-200px 0px;         }         #ulId li:nth-child(3){             left:400px;             top:0px;             background-position:-400px 0px;         }         #ulId li:nth-child(4){             left:0px;             top:200px;             background-position:0px -200px;         }         #ulId li:nth-child(5){             left:200px;             top:200px;             background-position:-200px -200px;         }         #ulId li:nth-child(6){             left:400px;             top:200px;             background-position:-400px -200px;         }         #ulId li:nth-child(7){             left:0px;             top:400px;             background-position:0px -400px;         }         #ulId li:nth-child(8){             left:200px;             top:400px;             background-position:-200px -400px;         }         #ulId li:nth-child(9){             left:400px;             top:400px;             background-position:-400px -400px;         } </style> </head> <body> <ul id="ulId"> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> </ul> </body> </html> <script> function $(id){         return document.getElementById(id);     }     var currIndex=-1;//表示当前按下的li的下标     var targetIndex=-1;//表示目标li的下标
        //一、让每个li能够实现拖拽功能         //1.获取所有li         var lis=$("ulId").children;         //2.循环给每个li绑定onmousedown事件         for(var i=0;i<lis.length;i++){             //给每个li设置自定义属性             lis[i].setAttribute("index",i)             lis[i].onmousedown=function(event){                 var evt=event || window.event;                 //3.偏移 记录鼠标按下时距离事件源的位置                 var offsetX=evt.offsetX;                 var offsetY=evt.offsetY;                 currIndex=this.getAttribute("index");                 this.style.zIndex=1;                 //4.给ul添加onmousemove事件,鼠标在ul里面移动                 $("ulId").onmousemove=function(event){                 var evt=event || window.event;                 //5、计算li距离ul的left和top ...的X(Y)针对的是事件的属性,...left(top)针对的是dom元素的属性                 //鼠标距离ul的位置                 var mouseX=evt.pageX-$("ulId").offsetLeft;                 var mouseY=evt.pageY-$("ulId").offsetTop;                 //li距离ul的位置                 var left1=mouseX-offsetX;                 var top1=mouseY-offsetY;                 //给外观赋值                 lis[currIndex].style.left=left1+"px";                 lis[currIndex].style.top=top1+"px";
                //计算目标li的位置                 var colsIndex=parseInt(mouseX/200); //列下标                 var rowsIndex=parseInt(mouseY/200); //行下标                 targetIndex=rowsIndex*3+colsIndex;//目标li的下标                 }             }             //6.给ul添加onmouseup事件             $("ulId").onmouseup=function(){                 $("ulId").onmousemove=null;                 lis[currIndex].style.zIndex=0;                 changeLi(currIndex,targetIndex);                 currIndex=-1;                 targetIndex=-1;             }         }
         function changeLi(sourIndex,tagIndex){         //二、交换两个li         if(sourIndex==-1 || tagIndex==-1){             return;         }         var lis=$("ulId").children;         if(sourIndex!=tagIndex){                          var temp=getStyle(lis[sourIndex],"backgroundPosition");             lis[sourIndex].style.backgroundPosition=getStyle(lis[tagIndex],"backgroundPosition");             lis[tagIndex].style.backgroundPosition=temp;         }                  //三、归位         var colsIndex=sourIndex%3;         var rowsIndex=parseInt(sourIndex/3);         lis[sourIndex].style.left=colsIndex*200+"px";         lis[sourIndex].style.top=rowsIndex*200+"px";     }
//获取dom对象的样式属性 //参数: // dom对象 // 样式属性名
//返回值:样式属性值
function getStyle(domObj,attr) { if(domObj.currentStyle){//如果能够获取到currentStyle return domObj.currentStyle[attr]; }else{ return window.getComputedStyle(domObj)[attr]; } }
</script>

 九宫格(纯原生)

 

上一篇:总结那些有默认margin,padding值的html标签


下一篇:基于JS和JQuery实现的两种时钟效果(2)