js實(shí)現(xiàn)圖片360度旋轉(zhuǎn)
大致介紹
這次是一個簡單的效果,就是思路的問題
效果:
思路
旋轉(zhuǎn)的效果就是根據(jù)鼠標(biāo)的的移動距離來顯示不同的圖片,形成視覺差,仿佛就是在正真的旋轉(zhuǎn)
由于效果是根據(jù)鼠標(biāo)的移動距離來操作的,即移動的像素值。如果按照默認(rèn)的情況,移動鼠標(biāo)的時候圖片就旋轉(zhuǎn)的太快了,所以我們要給鼠標(biāo)移動的距離處以15,降低圖片的旋轉(zhuǎn)速度。
var l = parseInt(-x/15);
有一個問題是在鼠標(biāo)向左移動的時候,移動的距離是負(fù)的。要想正確的顯示圖片,就要對負(fù)值進(jìn)行處理。例如-1,圖片要顯示最后一張即72張(圖片一共有72張)。-100時要顯示第44張圖片,但是由于圖片的命名是從1開始的,而不是從0開始的,所以要在最后加1
var l = parseInt(-x/15); if(l > 0){ l = l%72+1; }else{ l = (l + -72*(Math.floor(l/72))) + 1; }
代碼
<style> html,body {height:100%;} body {margin:0;} img{ width: 640px; height: 378px; position: absolute; left: 50% top: 50%; margin-top:120px; margin-left:320px; } </style> <script> window.onload = function(){ var x = 0; var oImg = document.getElementById('img1'); document.onmousedown = function(ev){ var ev = ev || enent; var disX = ev.clientX - x; document.onmousemove = function(ev){ var ev = ev || event; x = ev.clientX - disX; var l = parseInt(-x/15); if(l > 0){ l = l%72+1; }else{ l = (l + -72*(Math.floor(l/72))) + 1; } oImg.src = "img/Seq_v04_640x378_"+ l +".jpg" return false; }; document.onmouseup = function(){ document.onmouseup = null; document.onmousemove = null; } return false; } } </script> </head> <body> <div class="img_wrap"> <img id="img1" src="img/Seq_v04_640x378_1.jpg" > </div> </body>
以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時也希望多多支持腳本之家!
相關(guān)文章
將HTML的左右尖括號等轉(zhuǎn)義成實(shí)體形式的兩種實(shí)現(xiàn)方式
這篇文章主要介紹了將HTML的左右尖括號等轉(zhuǎn)義成實(shí)體形式的兩種實(shí)現(xiàn)方式,需要的朋友可以參考下2014-05-05原生javascript實(shí)現(xiàn)圖片按鈕切換
這篇文章主要介紹了原生javascript實(shí)現(xiàn)圖片按鈕切換,需要的朋友可以參考下2015-01-01javascript-hashchange事件和歷史狀態(tài)管理實(shí)例分析
這篇文章主要介紹了javascript-hashchange事件和歷史狀態(tài)管理,結(jié)合實(shí)例形式分析了javascript-hashchange基本功能、原理及歷史狀態(tài)管理相關(guān)操作技巧,需要的朋友可以參考下2020-04-04JS 在指定數(shù)組中隨機(jī)取出N個不重復(fù)的數(shù)據(jù)
這篇文章主要介紹了JS 在指定數(shù)組中隨機(jī)取出N個不重復(fù)數(shù)據(jù)的方法,需要的朋友可以參考下2014-06-06js HTML5 Ajax實(shí)現(xiàn)文件上傳進(jìn)度條功能
這篇文章主要介紹了javascript實(shí)現(xiàn)文件上傳進(jìn)度條功能的相關(guān)資料啊,感興趣的朋友可以參考一下2016-02-02