jquery+CSS3實現(xiàn)3D拖拽相冊效果
很久之前練習(xí)過的一個實踐,復(fù)習(xí)完漸變、圓角、3D變形、拖拽等等來看源碼,估計還不會太凌亂(◎﹏◎)哈哈哈
效果圖:
HTML:
<!doctype html> <html onselectstart="return false;" lang="en"><!-- !important --> <head> <meta charset="UTF-8"> <title>3D拖拽相冊</title> <link rel="stylesheet" href="css/style.css"> </head> <body> <!-- html上阻止默認行為onselectstart --> <div class="pic"> <img src="images/1.jpg" /> <img src="images/2.jpg"/> <img src="images/3.jpg" /> <img src="images/4.jpg" /> <img src="images/5.jpg" /> <img src="images/6.jpg" /> <img src="images/7.jpg" /> <img src="images/8.jpg" /> <img src="images/9.jpg" /> <img src="images/10.jpg" /> <img src="images/11.jpg" /> <p></p> </div> <script type="text/javascript" src="js/jquery.js"></script> <script type="text/javascript" src="js/index.js"></script> </body> </html>
CSS:
*{margin:0;padding:0;} body,html{background:#000;} .pic{ width:120px;height:180px; margin:150px auto 0; border:1px solid red; position:relative; transform-style:preserve-3d;/*設(shè)置3D環(huán)境*/ /*perspective:800px;不用這個*/ transform:perspective(800px) rotateX(-10deg) rotateY(0deg); } .pic img{ position:absolute; height:100%;width:100%; border-radius:5px; box-shadow:0 0 10px #fff; /*背景漸變效果!important*/ -webkit-box-reflect:below 10px -webkit-linear-gradient(top,rgba(0,0,0,0) 80%,rgba(0,0,0,1) 100%); } .pic p{ width:1200px;height:1200px; /*放射性背景漸變*/ background: -webkit-radial-gradient(center center,400px 400px,rgba(255,255,255,0.2),rgba(0,0,0,0)); position:absolute; left:50%;top:100%; /*往回移動位置*/ margin-left:-600px; margin-top:-600px; transform:rotateX(90deg); border-radius:600px; }
JQ:
$(function(){ var imgL=$("div.pic img").size();//獲取到圖片總數(shù) // alert(imgL); var deg=360/imgL;//每張圖片需要旋轉(zhuǎn)的角度 var roY=0,roX=0;//定義父盒子旋轉(zhuǎn)初始值 var xN,yN;//定義當(dāng)前點擊處的坐標和前一坐標的距離差 var play;//定義定時器 $("div.pic img").each(function(i){ //設(shè)置每張圖片 的3D位置 $(this).css({"transform":"rotateY("+i*deg+"deg) translateZ(350px)"}); $(this).attr("ondragstart","return false");//每張圖片都禁止拖拽 }); $(document).mousedown(function(ev){ //每次都先清除定時器,防止混亂 clearInterval(play); //獲取當(dāng)前點擊處的坐標 var x_=ev.clientX; var y_=ev.clientY; $(this).bind("mousemove",function(ev){ //獲取移動后的坐標 var x=ev.clientX; var y=ev.clientY; //獲取移動后,當(dāng)前坐標和前一坐標的距離差 xN=x-x_; yN=y-y_; //將距離差轉(zhuǎn)變?yōu)槿萜餍D(zhuǎn)的數(shù)值 roY+=xN*0.2; roX-=yN*0.1; /*$("body").append("<div style='background:red;width:5px;height:5px;position:absolute;top:"+y+"px;left:"+x+"px;'></div>"); 此處為方便看到效果*/ $("div.pic").css({ "transform":"perspective(800px) rotateY("+roY+"deg) rotateX("+roX+"deg)" }); //將移動后的點設(shè)為前一點存放到x_,y_變量中 x_=ev.clientX; y_=ev.clientY; }) }).mouseup(function(){ //鼠標抬起時,解綁鼠標移動事件 $(this).unbind("mousemove"); //鼠標抬起時候,實現(xiàn)慣性緩沖效果 play=setInterval(function(){ //將距離插值慢慢變小,實現(xiàn)慣性緩沖 xN*=0.95; yN*=0.95; //向左拖動的時候,當(dāng)前點與前一點的距離差是負值的,要取絕對值 //停止慣性 if(Math.abs(xN)<1&&Math.abs(yN)<1){ clearInterval(play); } //將距離差轉(zhuǎn)為旋轉(zhuǎn)角度 roY+=xN*0.2; roX-=yN*0.1; $("div.pic").css({ "transform":"perspective(800px) rotateY("+roY+"deg) rotateX("+roX+"deg)" }); },30); }) })
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
jQuery+css+html實現(xiàn)頁面遮罩彈出框
面遮罩彈出框已經(jīng)不是一個陌生的話題了,實現(xiàn)的方法大同小異多種多樣,今天用jQuery實現(xiàn)頁面遮罩彈出框,主要用的技術(shù)有JQuery,css和html,感興趣的朋友可以參考下哈2013-03-03關(guān)于HTML5的data-*自定義屬性的總結(jié)
大家總是習(xí)慣使用HTML標簽添加自定義屬性來存儲和操作數(shù)據(jù),所以才在HTML5規(guī)范里增加了一個自定義data屬性,這樣使用更便捷,一起跟隨小編過來看看吧2018-05-05ajax與json 獲取數(shù)據(jù)并在前臺使用簡單實例
這篇文章主要介紹了ajax與json 獲取數(shù)據(jù)并在前臺使用簡單實例的相關(guān)資料,需要的朋友可以參考下2017-01-01jquery中dom操作和事件的實例學(xué)習(xí) 下拉框應(yīng)用
jquery中dom操作和事件的實例學(xué)習(xí) 下拉框應(yīng)用實現(xiàn)代碼,需要的朋友可以參考下。2011-12-12js中獲取 table節(jié)點各tr及td的內(nèi)容簡單實例
下面小編就為大家?guī)硪黄猨s中獲取 table節(jié)點各tr及td的內(nèi)容簡單實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-10-10jquery animate實現(xiàn)鼠標放上去顯示離開隱藏效果
本文為大家介紹下使用jquery animate實現(xiàn)鼠標放上去顯示,離開就隱藏的效果,感興趣的朋友可以參考下哈,希望對大家有所幫助2013-07-07