我已經花了幾天的時間在一個產品頁面的圖像滑塊上工作,並且我已經設法構建了我認爲足夠滿意的滑塊,但是我想添加的最後一個接觸不是從一個圖像到下一個圖像的靜態移動,您會看到一個物理滑動動畫,我遇到的唯一問題是它允許多次點擊,這意味着這些值完全被拋出,並且會被打破。我想知道如何檢查一個函數何時運行,以便它不能再運行,直到它完成,或者我想也許我可以使用.finish(),以便用戶不會被迫等待動畫在每次點擊之前完成,因此如果他們想要快速滾動,它會將先前的動畫趕到最終值。創建動畫圖像滑塊 - 如何動畫和限制多次點擊?
這是(當前)工作滑塊的jsfiddle鏈接。
如果在第12行和第24行上將.css()更改爲.animate(),則會在箭頭上單擊多次時看到我遇到的問題。
HTML
<div id="imageSlider">
<div id="imagesContainer">
<div class="left imagePane" id="selectedImage">
<div class="sliderImageAlign">
<p style="height: 100px; width: 75px; line-height: 100px; text-align: center;">1</p>
</div>
</div>
<div class="left imagePane">
<div class="sliderImageAlign">
<p style="height: 100px; width: 75px; line-height: 100px; text-align: center;">2</p>
</div>
</div>
<div class="left imagePane">
<div class="sliderImageAlign">
<p style="height: 100px; width: 75px; line-height: 100px; text-align: center;">3</p>
</div>
</div>
<div class="left imagePane">
<div class="sliderImageAlign">
<p style="height: 100px; width: 75px; line-height: 100px; text-align: center;">4</p>
</div>
</div>
<div class="left imagePane">
<div class="sliderImageAlign">
<p style="height: 100px; width: 75px; line-height: 100px; text-align: center;">5</p>
</div>
</div>
</div>
<div id="imagesUp">
<div id="imagesArrowUp"></div>
</div>
<div id="imagesDown">
<div id="imagesArrowDown"></div>
</div>
</div>
jQuery的
$(document).ready(function() {
var imageHeight = $("#selectedImage").height(),
containerHeight = $("#imagesContainer").height(),
imageSliderHeight = $("#imageSlider").height() - ($("#imagesDown")[0].offsetHeight + $("#imagesUp")[0].offsetHeight);
$("#imagesDown").on('click', function() {
if (containerHeight > imageSliderHeight) {
var containerPos = $("#imagesContainer").position().top,
containerNewPos = containerPos - imageHeight;
if (imageSliderHeight < (containerHeight + containerPos)) {
$("#imagesContainer").css({
top: containerNewPos + 'px'
}, 800);
}
}
});
$("#imagesUp").on('click', function() {
var containerPos = $("#imagesContainer").position().top,
containerNewPos = containerPos + imageHeight;
if (containerNewPos < imageHeight) {
$("#imagesContainer").css({
top: containerNewPos + 'px'
}, 800);
}
});
});
CSS
* {
color: RGB(0, 0, 0);
font: 14px Arial;
margin: 0;
padding: 0;
text-decoration: none;
}
.left {
float: left;
}
.right {
float: right;
}
#imageSlider {
border: 1px solid RGB(0, 0, 0);
box-shadow: 0px 0px 10px RGB(200, 200, 200);
float: left;
height: 450px;
margin-right: 20px;
overflow: hidden;
position: relative;
width: 87px;
}
#imagesContainer {
position: absolute;
top: 35px;
width: 100%;
}
#imagesUp,
#imagesDown {
background: RGB(20, 100, 150);
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
height: 35px;
position: absolute;
width: 100%;
}
#imagesUp {
border-bottom: 1px solid RGB(0, 0, 0);
top: 0;
}
#imagesDown {
border-top: 1px solid RGB(0, 0, 0);
bottom: 0;
}
#imagesArrowUp,
#imagesArrowDown {
border-left: 20px solid transparent;
border-right: 20px solid transparent;
margin: 0 auto;
margin-top: 10px;
height: 0;
width: 0;
}
#imagesArrowUp {
border-bottom: 15px solid RGB(200, 230, 240);
}
#imagesArrowDown {
border-top: 15px solid RGB(200, 230, 240);
}
#selectedImage {
background: RGBA(20, 100, 150, 0.4);
}
.sliderImageAlign {
border: 1px solid RGB(0, 0, 0);
height: 100px;
margin: 5px;
width: 75px;
}
謝謝!是的,我打算這樣做,所以有一個函數在其中任何一個被點擊時運行,並且只需在該函數內部根據哪個id被點擊來使其上/下運行適當的代碼。 – Banny