jquery - jquery滑块在左侧不能很好地滑动
问题描述
我想在我的项目中使用下面的代码创建一个无限的滑块。我希望滑块动画左侧与动画右侧相同。我尝试了很多方法来解决这个问题,但都没有成功。对于右键单击幻灯片动画,我必须使用 if 语句和 for 循环添加一些额外的幻灯片,使其成为 14 张幻灯片,这是右动画所需的最少幻灯片数。
我试图在左侧添加额外的幻灯片,但在将滑块滑动到右侧后,它就停止了一切。我希望它是一个无限的滑块,我被困在左侧。
HTML
$(document).ready(function(){
var itemwidth = $('main ul li ').width() + 10;
var movementwidth = itemwidth * 6;
var length = $('main ul li').length;
if (length <= 20) {
for (var i = 0; i < 20 - length; i++) {
if (i > 11) {
$('main ul li:nth-child(-n+'+i+')').clone().appendTo('main ul');
}
}
}
$(".left").click(function(event) {
$('main ul').animate({left:+movementwidth}, 500, function functionName() {
$('main ul li:nth-last-child(-n+5)').prependTo('main ul');
$('main ul').css('left', -itemwidth);
});
});
$(".right").click(function(event) {
$('main ul').animate({left:-movementwidth}, 500, function functionName() {
$('main ul li:nth-child(-n+5)').appendTo('main ul');
$('main ul').css('left', -itemwidth);
});
});
});
* {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: monospace;
}
main {
min-width: max-content;
height: 300px;
position: absolute;
top: 0;
bottom: 0;
margin: auto;
}
ul {
position: relative;
list-style: none;
display: flex;
align-items: center;
margin: 0 auto;
overflow: hidden;
background: green;
}
li {
position: relative;
background: red;
width: 19.2vw;
height: 19.99vw;
margin: 0 7px;
}
li span {
font-size: 4vw;
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
margin: auto;
width: 2vw;
height: 4vw;
}
main > div {
font-size: 2vw;
cursor: pointer;
margin-right: 25px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<main>
<ul>
<li><span>1</span></li>
<li><span>2</span></li>
<li><span>3</span></li>
<li><span>4</span></li>
<li><span>5</span></li>
<li><span>6</span></li>
<li><span>7</span></li>
</ul>
<div class="left">
</div>
<div class="right">
</div>
<div class="left">
left
</div>
<div class="right">
right
</div>
</main>
解决方案
请检查以下 javascript。
$(document).ready(function(){
var item_width = $('main ul li ').width() + 14;
var length = $('main ul li').length;
var move_count = 2;
var movement_width = item_width * move_count;
var cloneStr = $('main ul').html();
$(cloneStr).appendTo('main ul');
$(cloneStr).prependTo('main ul');
$('main ul').css('left', -item_width * length );
$(".left").click(function(event) {
var moveRight = parseFloat( $('main ul').css('left') ) + movement_width;
$('main ul').animate({left:moveRight}, 500, function functionName() {
var rightElems = $('main ul li').slice( -move_count );
rightElems.clone().prependTo('main ul');
rightElems.remove();
$('main ul').css('left', -item_width * length );
});
});
$(".right").click(function(event) {
var moveLeft = parseFloat( $('main ul').css('left') ) - movement_width;
$('main ul').animate({left:moveLeft}, 500, function functionName() {
var leftElems = $('main ul li').slice(0, move_count );
leftElems.clone().appendTo('main ul');
leftElems.remove();
$('main ul').css('left', -item_width * length );
});
});
});
move_count 表示要移动的项目数。加载 html 后,将当前项目附加到之前和之后。因此, ul 将有 3 次项目。并且一旦执行了动画,前 n 个项目或最后 n 个项目将根据方向移动到最后一个或第一个。例如,如果向右移动,第一个 move_count 个项目将被移动到最后一个,当您单击向左时,最后一个 move_count 个项目将被移动到第一个。
更新: 新版本:
$(document).ready(function(){
var item_width = $('main ul li ').width() + 14;
var length = $('main ul li').length;
var move_count = 2;
var movement_width = item_width * move_count;
var cloneStr = $('main ul').html();
$(cloneStr).appendTo('main ul');
$(cloneStr).prependTo('main ul');
$('main ul').css('left', -item_width * length );
$(".left").click(function(event) {
moveTo( -move_count );
});
$(".right").click(function(event) {
moveTo( move_count );
});
function moveTo( moveCount ){
var moveLeft = parseFloat( $('main ul').css('left') ) - ( item_width * moveCount );
$('main ul').animate({left:moveLeft}, 500, function functionName() {
var moveElems;
if ( moveCount > 0 ){
moveElems = $('main ul li').slice(0, moveCount );
moveElems.clone().appendTo('main ul');
}else{
moveElems = $('main ul li').slice( moveCount );
moveElems.clone().prependTo('main ul');
}
moveElems.remove();
$('main ul').css('left', -item_width * length );
});
}
});
推荐阅读
- gatsby - Auth0 不适用于从 DatoCMS 模型生成的 Gatsby slug
- sql-server - SQL Server 删除具有临时表的特殊架构下的所有表
- apache-kafka - 从 KSQL 流中使用 AVRO Kafka 主题时出错
- c - Raylib DrawTriangle() 用法
- microsoft-graph-api - 草稿被保存到 O365 组而不是用户的草稿文件夹
- c# - CSOM 寻找显示在 SharePoint 表单上的列/字段列表
- docker - 仅将 ASPNETCORE_ENVIRONMENT 的值设置为 docker-compose up cli 命令
- node.js - 使用库 http2-proxy 在节点 js 服务器中代理 http2 请求时出错
- r - 在两个矩阵/数据帧中找到同一行,然后在 R 中的一个矩阵/数据帧中删除
- flutter - 如何解决flutter app中的“构建函数返回null”?