当使用 jQuery 按下下一个或上一个按钮时,这个旋转木马 (ul li) 如何动画?
How animate this carousel (ul li) when press next or previous button with jQuery?
当按下两个按钮(下一个、上一个)之一时,我需要旋转木马的元素来制作动画,因为它们向右或向左移动并输入新元素。
问题是我不知道如何开始动画轮播。
我这里有一个JSfiddle
(function($) {
$.fn.scrollList = function(numVisibleItems) {
var visibleItems = numVisibleItems.visibleItems;
var $carousel = $(this);
var $slideItems = $("li", this);
var $firstItem;
var setCurrentItems = function() {
$slideItems.hide();
$('.current-scroll-list', $carousel).removeClass('current-scroll-list');
$currentItems = $("li:nth-child(-n+" + visibleItems + ")", $carousel);
$currentItems.addClass('current-scroll-list').show();
}
var nextItem = function() {
$firstItem = $("li:nth-child(-n+" + visibleItems + ")", $carousel);
$carousel.append($firstItem);
setCurrentItems();
}
var previousItem = function() {
$lastItem = $("li:nth-last-child(-n+" + visibleItems + ")", $carousel);
$carousel.prepend($lastItem);
setCurrentItems();
}
function addArrows() {
if ($slideItems.length > visibleItems) {
if ($($carousel).parent().find(".next").length == 0 && $($carousel).parent().find(".previous").length == 0) {
$carousel.parent().append('<span class="carousel-btn previous">➤</span>');
$carousel.parent().append('<span class="carousel-btn next">➤</span>');
}
$($carousel).siblings(".next").click(nextItem);
$($carousel).siblings(".previous").click(previousItem);
}
}
setCurrentItems();
addArrows();
};
})(jQuery);
$(document).ready(function() {
$(".num-list").scrollList({
visibleItems: $(".num-list").data("numitems")
});
});
现在,当您按下两个按钮之一时,旋转木马会在没有动画的情况下传递到下一个项目,我需要知道如何在没有插件的情况下为其设置动画。
我需要 this plugin.
编辑
HTML:
<div class="wrap gradient_bg">
<ul class="list-4 num-list" data-numitems="4">
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
<li>7</li>
<li>8</li>
<li>9</li>
</ul>
</div>
CSS:
.carousel-btn{
position: absolute;
background: rgba(255, 255, 255, 0.5);
padding: 0.5em;
z-index: 1;
top: 5px;
cursor: pointer;
}
.carousel-btn.previous{
left: 0;
padding-right: 2em;
transform: rotate(180deg);
top: 7px;
}
.carousel-btn.next{
right: 0;
padding-left: 2em;
}
ul{
display: flex;
justify-content: space-around;
list-style: none;
padding: 0;
}
CSS flexbox 不是这种轮播的最佳解决方案,所以我删除了它,而且你的项目不需要隐藏,因为包装器溢出是不可见的,所以请记住我'我们稍微更改了 CSS。
这是有效的 jsfiddle:https://jsfiddle.net/lakialekscs/2ezvyx57/
这是动画解决方案。将 ul 元素向左移动,在动画完成后重置位置并显示下一张幻灯片。这是一个粗糙的代码,但你可以从这里拿走它并使它变得漂亮。
$('ul').animate({
left: $('ul').position().left - $('ul').width() + "px"
}, 200, function() {
$('ul').css({
"left": "auto",
"right": "auto"
});
});
当按下两个按钮(下一个、上一个)之一时,我需要旋转木马的元素来制作动画,因为它们向右或向左移动并输入新元素。
问题是我不知道如何开始动画轮播。
我这里有一个JSfiddle
(function($) {
$.fn.scrollList = function(numVisibleItems) {
var visibleItems = numVisibleItems.visibleItems;
var $carousel = $(this);
var $slideItems = $("li", this);
var $firstItem;
var setCurrentItems = function() {
$slideItems.hide();
$('.current-scroll-list', $carousel).removeClass('current-scroll-list');
$currentItems = $("li:nth-child(-n+" + visibleItems + ")", $carousel);
$currentItems.addClass('current-scroll-list').show();
}
var nextItem = function() {
$firstItem = $("li:nth-child(-n+" + visibleItems + ")", $carousel);
$carousel.append($firstItem);
setCurrentItems();
}
var previousItem = function() {
$lastItem = $("li:nth-last-child(-n+" + visibleItems + ")", $carousel);
$carousel.prepend($lastItem);
setCurrentItems();
}
function addArrows() {
if ($slideItems.length > visibleItems) {
if ($($carousel).parent().find(".next").length == 0 && $($carousel).parent().find(".previous").length == 0) {
$carousel.parent().append('<span class="carousel-btn previous">➤</span>');
$carousel.parent().append('<span class="carousel-btn next">➤</span>');
}
$($carousel).siblings(".next").click(nextItem);
$($carousel).siblings(".previous").click(previousItem);
}
}
setCurrentItems();
addArrows();
};
})(jQuery);
$(document).ready(function() {
$(".num-list").scrollList({
visibleItems: $(".num-list").data("numitems")
});
});
现在,当您按下两个按钮之一时,旋转木马会在没有动画的情况下传递到下一个项目,我需要知道如何在没有插件的情况下为其设置动画。
我需要 this plugin.
编辑
HTML:
<div class="wrap gradient_bg">
<ul class="list-4 num-list" data-numitems="4">
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
<li>7</li>
<li>8</li>
<li>9</li>
</ul>
</div>
CSS:
.carousel-btn{
position: absolute;
background: rgba(255, 255, 255, 0.5);
padding: 0.5em;
z-index: 1;
top: 5px;
cursor: pointer;
}
.carousel-btn.previous{
left: 0;
padding-right: 2em;
transform: rotate(180deg);
top: 7px;
}
.carousel-btn.next{
right: 0;
padding-left: 2em;
}
ul{
display: flex;
justify-content: space-around;
list-style: none;
padding: 0;
}
CSS flexbox 不是这种轮播的最佳解决方案,所以我删除了它,而且你的项目不需要隐藏,因为包装器溢出是不可见的,所以请记住我'我们稍微更改了 CSS。
这是有效的 jsfiddle:https://jsfiddle.net/lakialekscs/2ezvyx57/
这是动画解决方案。将 ul 元素向左移动,在动画完成后重置位置并显示下一张幻灯片。这是一个粗糙的代码,但你可以从这里拿走它并使它变得漂亮。
$('ul').animate({
left: $('ul').position().left - $('ul').width() + "px"
}, 200, function() {
$('ul').css({
"left": "auto",
"right": "auto"
});
});