<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
原生JS生成九宮格圖片並且實現圖片互換,供大家參考,具體內容如下
涉及知識點,請
1、熟練利用js做出html樣式
2、對onmousedown,onmousemove,onmouseup等事件熟練組合運用
3、熟練掌握事件物件domobj.offsetLeft,domobj.offsetTop,domobj.offsetWidth,domobj.offsetHeight的知識點
4、瞭解事件 e.clientX,e.clientY,e.offsetX,e.offsetY,e.pageX,e.pageY的知識點
5、理解克隆節點的原理
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> body { margin: 0; padding: 0; } #wrap { position: relative; } #wrap div { width: 100px; height: 100px; position: absolute; text-align: center; line-height: 100px; font-size: 50px; } </style> </head> <body> <div id="wrap"> </div> <script> // 1.獲取warp var wrap = document.querySelector('#wrap') //2.建立3行3列9個div。並且給每個div新增隨機顏色 //以下為表示構建思路,利用雙重for迴圈 //(0,0) (110,0) (220,0) //(0,110)(110,110)(220,110) //(0,220)(110,220)(220,220) var count = 0 var chart = [1, 2, 3, 4, 5, 6, 7, 8, 9] for (var i = 0; i < 3; i++) {//行 for (var j = 0; j < 3; j++) {//列 var odiv = document.createElement('div'); wrap.appendChild(odiv); //設定top和left值,注意行對應的是odiv.offsetHeight,列對應的是odiv.offsetWidth odiv.style.top = i * (odiv.offsetHeight + 10) + 'px'; odiv.style.left = j * (odiv.offsetWidth + 10) + 'px'; //獲取隨機顏色,用的rgb隨機獲取方式 odiv.style.backgroundColor = 'rgb(' + Math.floor(Math.random() * 256) + ',' + Math.floor(Math.random() * 256) + ','+ Math.floor(Math.random() * 256) + ')'; //給每個圖片標上號碼,i,j最大值為3,但是共執行了9次,設定變數count=0,count++作為陣列的索引把對應的內容新增到div上 odiv.innerText = chart[count++]; } } //3.獲取迴圈中建立的9個div,並新增點選滑鼠事件 var items = wrap.children for (var i = 0; i < items.length; i++) { items[i].onmousedown = function (e) { var evt = e || event; //獲取滑鼠點下相對於事件源的偏移量 var x = evt.offsetX; var y = evt.offsetY; //this指向滑鼠點選要拖拽的物件 var dragitem = this; //克隆點選拖拽的物件。注意此時解釋可能有點抽象,但是解題關鍵,克隆物件後相當於除了上述9個事件, //又生成了一個隱藏的和點選的div相同的物件,把克隆的物件替換掉剛點選時的即將拖拽的物件,此時拖 //拽物件被隱藏,脫離父元素,此時需要把拖拽的物件新增到父元素的最後,使其重新為10個子元素,否則拖拽的元素無法顯示。 var clonenode = dragitem.cloneNode(); wrap.replaceChild(clonenode, dragitem); //把拖拽的節點放到wrap的最後 wrap.appendChild(dragitem); //拖拽時把拖拽的層次向上調一下,否則會被覆蓋。 dragitem.style.zIndex = 1; //4,此時滑鼠點選時需要準備的工作已經做完了,因為拖拽滑鼠時,拖拽物件時再檔案上移動的,此時滑鼠移動的物件應為document document.onmousemove = function (e) { var evt = e || event; //獲取拖拽物件跟隨滑鼠時在檔案中的定位,事件源據檔案的邊距-點選時距離事件源的偏移=定位的座標 var x1 = evt.clientX - x; var y1 = evt.clientY - y; dragitem.style.left = x1 + 'px'; dragitem.style.top = y1 + 'px'; //取消預設行為 return false;v } //5,有拖拽物件的定位,此時需要判斷滑鼠鬆開時距離哪個建立的哪個div距離最近,交換其距離。上面提到,此時共建立了10個Div, //分別求出拖拽物件和其他10個div的距離傳到陣列中,找出最小值對應的索引,該索引對應的div即為距離最近的div,然後交換兩者的 //位置(注意:觀察陣列,最後一個為0,且上面已經把拖拽物件放到最後,是自己和自己比,因此迴圈時減一即可忽略和自己的比較) document.onmouseup = function () { var arr = []; //迴圈長度-1,忽略和自己的比較 for (var j = 0; j < items.length - 1; j++) { //利用勾股定理求距離,並傳入陣列 var disx = dragitem.offsetLeft - items[j].offsetLeft; var disy = dragitem.offsetTop - items[j].offsetTop; var dissum = Math.sqrt(Math.pow(disx, 2) + Math.pow(disy, 2)) arr.push(dissum); } //利用展開符...展開陣列,用Math.min找出最小值,再用最小值去找出陣列對應索引 var min = Math.min(...arr); var dex = arr.indexOf(min); //把拖拽物件的定位換成距離最近div的距離 dragitem.style.left = items[dex].style.left; dragitem.style.top = items[dex].style.top; //然後把距離最近的div的定位換成此時克隆物件的定位(即原拖拽物件的定位) items[dex].style.left = clonenode.style.left; items[dex].style.top = clonenode.style.top; //此時交換完畢,把克隆節點移除 wrap.removeChild(clonenode) //移除事件並取消預設行為 document.onmousemove = ''; document.onmouseup = ''; return false; } } } </script> </body> </html>
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45