#jquery #bxslider
#jquery #bxslider
Вопрос:
Я использую bxSlider для отображения карусели карточек. Мои настройки —
var carousel = {
minSlides: 4.5,
maxSlides: 4.5,
slideWidth: 250,
pager: false,
moveSlides: 4,
speed:2000,
hideControlOnEnd:true
}
Есть ли способ, чтобы при нажатии «далее» я мог отобразить первую карточку также как половину?(без изменения ширины слайдера)
Я пытаюсь изменить значение по оси x, как показано ниже, но ползунок перестает работать.
.slider{
transform: translate3d(-900px, 0px, 0px) !important;
}
Как я могу этого добиться?
РЕДАКТИРОВАТЬ: Более простой и прямой подход к этому был предоставлен ‘Karan’ и работает отлично. Однако я хочу, чтобы этот эффект применялся только после того, как пользователь нажмет «далее», а не при первом отображении карточек.
Мой код ниже —
function translate(){
var current = carousel.getCurrentSlide();
if(current>=1){
$('div.slider')
.css({'margin-left': '5.56%','margin-right': '5.56%' } );
}
}
Вызов этой функции при нажатии далее как-
onSlideAfter: function() {
translate();
Это работает нормально, за исключением того, что когда я нажимаю предыдущий и возвращаюсь к первоначальному отображению, он снова отображается как половина.
Чего мне здесь не хватает?
Комментарии:
1. Можете ли вы поделиться какой-либо скрипкой из вашей демонстрации?
Ответ №1:
Вы можете добавить приведенный ниже css в свой код. При отображении 4.5
слайдов каждый слайд будет иметь 22.22%
ширину от div. И вы хотите отображать half
из first
и last
слайдов, поэтому вам нужно будет 0.25%
width
из first
и last
слайдов. Таким образом, вы можете разделить 22.22/4
и установить margin-left
и margin-right
.
div.bxslider {
margin-left: 5.56%;
margin-right: 5.56%;
}
Попробуйте это ниже.
$(document).ready(function() {
$('.bxslider').bxSlider({
minSlides: 4.5,
maxSlides: 4.5,
slideWidth: 250,
pager: false,
moveSlides: 4,
speed:2000,
hideControlOnEnd:true
});
});
div.bxslider {
margin-left: 5.56%;
margin-right: 5.56%;
}
<script type="text/javascript" src="//code.jquery.com/jquery-2.1.0.js"></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/bxslider/4.2.12/jquery.bxslider.min.js"></script>
<link rel="stylesheet" type="text/css" href="http://bxslider.com/lib/jquery.bxslider.css">
<div class="bxslider">
<div class="slide"><img src="http://placehold.it/1000x680/112233/ffffff?text=FooBar1" /></div>
<div class="slide"><img src="http://placehold.it/1000x680/ee5678/ffffff?text=FooBar2" /></div>
<div class="slide"><img src="http://placehold.it/1000x680/435ab6/ffffff?text=FooBar3" /></div>
<div class="slide"><img src="http://placehold.it/1000x680/11cc22/ffffff?text=FooBar4" /></div>
<div class="slide"><img src="http://placehold.it/1000x680/ffa500/ffffff?text=FooBar5" /></div>
<div class="slide"><img src="http://placehold.it/1000x680/cc44ff/ffffff?text=FooBar6" /></div>
</div>
Комментарии:
1. Отлично! сработало отлично! Этот подход более простой и прямой. Хотя я хочу, чтобы этот эффект применялся только после того, как пользователь нажмет кнопку Далее. т.е. на первый взгляд первая карта в первой позиции не будет равна половине. Карта в первой позиции ТОЛЬКО после скольжения должна отображаться как половина. Я редактирую свой вопрос и включаю логику для него, которая работает, за исключением одной небольшой проблемы, которая указана в описании.
Ответ №2:
Вызвать функцию на
onSlideBefore: function () {
translateprev();
} //to undo the changes
function translateprev() {
var current = carousel.getCurrentSlide();
if (current < 1) {
console.log("IF")
$('div.slider')
.css({ 'margin-left': '', 'margin-right': '' });
}
}