В настоящее время я делаю один J-запрос Slider, который работает таким образом, что когда вы нажмете кнопку "Далее", который будет сдвигаться справа налево и когда вы нажмете prev, который будет скользить слева направо. изображения ограничены, так что он начнет показывать предыдущее изображение круговым способом. Проблема в том, что кнопка "Предыдущий" и "Следующий" при нажатии не работает должным образом. Я не могу найти лучшее решение для этого. Может ли кто-нибудь предложить мне, что может быть лучшим способом написать его. Или есть эффективная техника для создания такого слайдера без использования каких-либо плагинов слайдера.
Код JQuery
$(document).ready(function(){
var galW = $('#gallery').width();
var imgN = $('#slider img').length;
$("#slider").width((galW/6)*imgN);
$('#next').click(function(){
var first = $("#slider img").first();
var last = $("#slider img").last();
first.stop().animate({marginLeft : -150},1500,function(){
first.detach().insertAfter(last).css('marginLeft','0px');
});
});
$('#prev').click(function(){
var first = $("#slider img").first();
var last = $("#slider img").last();
last.detach().insertBefore(first).css('marginLeft','-150px');
first.stop().animate({marginLeft : 0},1500);
});
});
Код HTML
<div id="gallery">
<div id="gallery_overflow">
<div id="slider">
<img src="#" width="150px" height="50px"/>
<img src="#" width="150px" height="50px"/>
<img src="#" width="150px" height="50px"/>
<img src="#" width="150px" height="50px"/>
<img src="#" width="150px" height="50px"/>
<img src="#" width="150px" height="50px"/>
<img src="#" width="150px" height="50px"/>
<img src="#" width="150px" height="50px"/>
</div>
</div>
<div id="prev"><img src="left.png" width="40px" height="40px"/></div>
<div id="next"><img src="right.png" width="40px" height="40px"/></div>
</div>
Изображения находятся в # Местах..
С некоторыми изменениями вашего кода вы можете заставить его работать следующим образом (для поддержки ссылок на изображения смотрите ниже в части EDIT),
CSS
#gallery{
overflow:hidden;
}
#slider {
white-space:nowrap;
}
#slider img {
margin-left:5px;
}
JS
$(document).ready(function () {
var galW = $('#gallery').width();
var imgN = $('#slider img').length;
var sliding = false;
$("#slider").width((galW / 6) * imgN);
$('#next').click(function () {
if(sliding)return;
sliding = true;
var first = $("#slider img").first();
var last = $("#slider img").last();
var defaultMarginLeft = first.css("margin-left");
first.animate({
marginLeft: (-1*first.width())
}, 1500, function () {
first.detach().insertAfter(last).css('marginLeft', defaultMarginLeft);
sliding = false;
});
});
$('#prev').click(function () {
if(sliding)return;
sliding = true;
var first = $("#slider img").first();
var last = $("#slider img").last();
var defaultMarginLeft = first.css("margin-left");
last.detach().insertBefore(first).css('marginLeft', (-1*first.width()));
first = $("#slider img").first();
first.animate({
marginLeft: defaultMarginLeft
}, 1500,function(){sliding=false;});
});
});
РЕДАКТИРОВАТЬ
Другая реализация с использованием элемента span в качестве заполнителя (на самом деле это заполнитель классов, который используется в селекторах, поэтому любой встроенный блок-элемент может использоваться вместо span с этим именем класса) для правильной поддержки ссылок на изображениях, а также для включения требуется любой элемент.
CSS
#gallery{
overflow:hidden;
}
#slider {
white-space:nowrap;
}
#slider .placeholder {
margin-left:5px;
}
JS
$(document).ready(function () {
var galW = $('#gallery').width();
var imgN = $('#slider .placeholder').length;
var sliding = false;
$("#slider").width((galW / 6) * imgN);
$('#next').click(function () {
if(sliding)return;
sliding = true;
var first = $("#slider .placeholder").first();
var last = $("#slider .placeholder").last();
var defaultMarginLeft = first.css("margin-left");
first.animate({
marginLeft: (-1*first.width())
}, 1500, function () {
first.detach().insertAfter(last).css('marginLeft', defaultMarginLeft);
sliding = false;
});
});
$('#prev').click(function () {
if(sliding)return;
sliding = true;
var first = $("#slider .placeholder").first();
var last = $("#slider .placeholder").last();
var defaultMarginLeft = first.css("margin-left");
last.detach().insertBefore(first).css('marginLeft', (-1*first.width()));
first = $("#slider .placeholder").first();
first.animate({
marginLeft: defaultMarginLeft
}, 1500,function(){sliding=false;});
});
});
HTML
<div id="gallery">
<div id="gallery_overflow">
<div id="slider">
<span class="placeholder"><a href=#><img src="http://placehold.it/150x50" /></a></span><span class="placeholder"><a href=#><img src="http://placehold.it/150x50" /></a></span><span class="placeholder"><a href=#><img src="http://placehold.it/150x50" /></a></span><span class="placeholder"><a href=#><img src="http://placehold.it/150x50" /></a></span><span class="placeholder"><a href=#><img src="http://placehold.it/150x50" /></a></span><span class="placeholder"><a href=#><img src="http://placehold.it/150x50" /></a></span><span class="placeholder"><a href=#><img src="http://placehold.it/150x50" /></a></span><span class="placeholder"><a href=#><img src="http://placehold.it/150x50" /></a></span>
</div>
</div>
<div id="prev">PREV</div>
<div id="next">NEXT</div>
</div>