使用css+jquery+jqueryUI 做出拖拉相片效果
首先我們先來看看最後的呈現效果:

先來看看資料夾的建立(記得要加圖片喔):

我們的html:
Step1.先引入css 和 js
<link rel="stylesheet" type="text/css" href="css/style.css" /> <script type="text/javascript" src="http://www.google.com/jsapi"></script> <script type="text/javascript" src="js/script.js"></script>
Step2.再放入10組圖片區塊
<div class="polaroid">
<img src="images/imgg (1).jpg" alt="Colloseum" />
<p>Lorem ipsum dolor.</p>
</div>
<div class="polaroid">
<img src="images/imgg (2).jpg" alt="Vatican" />
<p>Adipisicing elit aliquam maiores.</p>
</div>
<div class="polaroid">
<img src="images/imgg (3).jpg" alt="Forum Romanum" />
<p>Dolore recusandae suscipit</p>
</div>
<div class="polaroid">
<img src="images/imgg (4).jpg" alt="Fiat 500" />
<p>Excepturi autem consectetur</p>
</div>
<div class="polaroid">
<img src="images/imgg (5).jpg" alt="Me and my girl in Florance" />
<p>Accusantium molestias totam </p>
</div>
<div class="polaroid">
<img src="images/imgg (6).jpg" alt="Venetian Gondolas" />
<p>Consectetur adipisicing elit</p>
</div>
<div class="polaroid">
<img src="images/imgg (7).jpg" alt="Pizza" />
<p>Dolor sit amet consectetur<strong>the</strong> food</p>
</div>
<div class="polaroid">
<img src="images/imgg (8).jpg" alt="Swimming pool" />
<p>Autem consectetur aliquam maiores</p>
</div>
<div class="polaroid">
<img src="images/imgg (9).jpg" alt="Florence" />
<p>Excepturi autem consectetur aliquam maiores</p>
</div>
<div class="polaroid">
<img src="images/imgg (10).jpg" alt="Tower of Pisa" />
<p>Suscipit blanditiis nulla ea</p>
</div>
CSS部分:
給整個頁面一個背景,並且給圖片一個固定寬和高後,對文字自行做基本設定。
body,
div,
img,
p {
padding: 0;
margin: 0;
}
body {
background-image:url('../images/bg.jpg');
}
.polaroid {
width: 385px;
height: 385px;
background-color: papayawhip;
}
.polaroid img {
width: 350px;
height: 300px;
margin: 25px 0 0 15px;
}
.polaroid p {
text-align: center;
font-family: Georgia, serif;
font-size: 20px;
color: #41135f;
margin-top: 15px;
}
會出現以下畫面:

接著由於我們要讓頁面不能被滾動,並且先讓所有所有圖片區塊定位同一個位置(左上角),為接下來的動作做準備。
我們只要增加兩個CSS即可,也可以直接加在剛剛寫的CSS中:
body {
overflow: hidden;
}
.polaroid {
position: absolute;
}
畫面會變成以下這樣:
所有的圖都重疊在左上角且右邊的scroll bar消失了!

接著就是我們的js部份了:
首先先載入jquery和jquery UI
google.load("jquery", "1.3.1");
google.load("jqueryui", "1.7.0");
js部分說明直接寫在程式碼中方便閱讀:
google.setOnLoadCallback(function() {
// 當一開始載入時,我們先隨機亂數選擇要轉左邊或是右邊
// 這篇有呼叫一個fuction randomXToY 帶入第一個參數是希望數字的最小值
// 第二個參數是最大數字 第三個參數則是希望計算到小數點第幾位
$(".polaroid").each(function(i) {
var tempVal = Math.round(Math.random());
if (tempVal == 1) {
var rotDegrees = randomXToY(330, 360, 2);
} else {
var rotDegrees = randomXToY(0, 30, 2);
}
// 這是為了瀏覽器IE寫的 因為IE沒有innerWidth和innerHeight屬性
if (window.innerWidth == undefined) {
var wiw = 1000;
var wih = 700;
} else {
var wiw = window.innerWidth;
var wih = window.innerHeight;
}
//隨機一個數字讓一開始每一張相片透過絕對定位在畫面的不同位置
var cssObj = {
left: Math.random() * (wiw - 400),
top: Math.random() * (wih - 400),
"-webkit-transform": "rotate(" + rotDegrees + "deg)",
transform: "rotate(" + rotDegrees + "deg)"
};
$(this).css(cssObj);
});
//先設定一開始的z-index為1
var zindexnr = 1;
var dragging = false;
//當點擊的時候
$(".polaroid").mouseup(function(e) {
if (!dragging) {
// 放被拖拉的區塊z-index +1 ,使他在最上方
// 當你只是點擊他時,他會回到不被旋轉的方向
zindexnr++;
var cssObj = {
"z-index": zindexnr,
transform: "rotate(0deg)",
"-webkit-transform": "rotate(0deg)"
};
$(this).css(cssObj);
}
});
//.draggable 是讓被指定的範圍可以進行拖拉的function
$(".polaroid").draggable({
cursor: "crosshair",
//參數:start 表示點手擊他到放手中間的動作
//裡面的動作重複先前所說
start: function(event, ui) {
dragging = true;
zindexnr++;
console.log(zindexnr);
var cssObj = {
"box-shadow": "grey 3px 6px 6px", "-webkit-box-shadow": "grey 3px 6px 6px",
//製造點擊時的效果
"margin-left": "-20px",
"margin-top": "-20px",
"z-index": zindexnr
};
$(this).css(cssObj);
},
//參數:stop 表示放手時的動作
//裡面的動作重複先前所說
stop: function(event, ui) {
var tempVal = Math.round(Math.random());
if (tempVal == 1) {
var rotDegrees = randomXToY(330, 360, 2);
} else {
var rotDegrees = randomXToY(0, 30, 2); }
var cssObj = {
"box-shadow": "",
"-webkit-box-shadow": "",
transform: "rotate(" + rotDegrees + "deg)", "-webkit-transform": "rotate(" + rotDegrees + "deg)",
"margin-left": "0px",
"margin-top": "0px"
};
$(this).css(cssObj);
dragging = false;
}
});
//在兩個數中取一個數,並且期望計算後取道小數點第幾位
function randomXToY(minVal, maxVal, floatVal) {
var randVal = minVal + Math.random() * (maxVal - minVal);
return typeof floatVal == "undefined"
? Math.round(randVal)
: randVal.toFixed(floatVal);
}
});
這樣就完成了我們要的拖拉圖片效果了喔!
再看一次結果吧:

以上就是我們這次對於拖拉相片效果的介紹,如果有其他想暸解認識的電商、網站相關主題,都歡迎留言讓我們知道,或者需要相關服務,歐斯瑞團隊將非常樂意替您解決!
我要留言