如何使用javascript/jquery检测最后一个或第一个列表项是否显示在其容器中
How to detect that the last or 1st list item is displayed in its container with javascript/jquery
我第一次执行旋转木马,很难检测列表中的最后一个或第一个<li>
何时显示在视口(其容器)中。我希望当最后一个项目显示时,可以禁用下一个或上一个按钮,或者从第一个开始继续,反之亦然(我还没有决定应该发生什么…)。请不要使用插件,我仍处于学习阶段。。。
JSFiddle:http://jsfiddle.net/aayPV/
var slidesList = $('#slides').find('ul'),
slide = $('#slides li');
slidesList.css('width', (slide.length * slide.outerWidth(true)));
$('#ctrls').delegate('a', 'click', function(e) {
var thisElem = $(this),
lastLiPos = slidesList.find('li:last').position(),
lastLiPosLeft = lastLiPos.left,
lastLiPosTop = lastLiPos.top;
e.preventDefault();
if (thisElem.hasClass('next')) {
slidesList.animate({ marginLeft: '-=' + slide.outerWidth(true) + 'px' }, 300);
if ($('#slides li:last').position().left < ((slide.length * slide.outerWidth(true)) - (slide.outerWidth(true) * 5))) {
//Disable nextbutton
}
} else if (thisElem.hasClass('prev')) {
slidesList.animate({ marginLeft: '+=' + slide.outerWidth(true) + 'px' }, 300);
//If 1st item is displayed, disable prev button
}
});
HTML:
<div id="carousel">
<div id="ctrls">
<a href="#" class="prev">Prev</a>
<a href="#" class="next">Next</a>
</div>
<div id="slides">
<ul>
<li><p>1</p></li>
<li><p>2</p></li>
<li><p>3</p></li>
<li><p>4</p></li>
<li><p>5</p></li>
</ul>
</div>
</div>
CSS:
#ctrls {
margin-bottom: 10px;
}
#slides {
width: 305px;
border: 1px solid #555;
overflow: hidden;
}
#slides li {
width: 100px;
height: 100px;
border: 1px solid #999;
background: #e5e5e5;
float: left;
color: #777;
}
#slides li p {
font-family: arial, tahoma;
font-size: 46px;
font-weight: bold;
text-align: center;
margin-top: 25%;
}
非常感谢
我希望下面的代码能帮助你,
if (thisElem.hasClass('next')) {
if(lastLiPosLeft >= 2 ) { //I have edited this line changed >=0 to >=2
slidesList.animate({ marginLeft: '-=' + slide.outerWidth(true) + 'px' }, 300);
}
else {
$(".next").css('display', 'none');
}
} else if (thisElem.hasClass('prev')) {
//if( ) //this is for previous button
slidesList.animate({ marginLeft: '+=' + slide.outerWidth(true) + 'px' }, 300);
同样的条件适用于正确的位置和固定上一个按钮。
我已经测试了Next。
新的更新答案
我更新了你的小提琴。。。供参考http://jsfiddle.net/aayPV/22/
我认为检查单个变量的值比检查滑块的位置相对于总滑块的长度要有效得多。。。
var slidesList = $('#slides').find('ul'),
slide = $('#slides li');
slidesList.css('width', (slide.length * slide.outerWidth(true)));
var i=0,
last = slide.length - 3;
$('#ctrls').delegate('a', 'click', function(e) {
var thisElem = $(this),
lastLiPos = slidesList.find('li:last').position(),
lastLiPosLeft = lastLiPos.left,
lastLiPosTop = lastLiPos.top;
console.log(lastLiPosLeft, ''n', slidesList.position().left);
e.preventDefault();
if (thisElem.hasClass('next')) {
if(i==last) {
alert('end'); return false;
} else {
++i;
slidesList.animate({ marginLeft: '-=' + slide.outerWidth(true) + 'px' }, 300);
}
} else {
if (thisElem.hasClass('prev')) {
if(i==0) {
alert('beginning'); return false;
} else {
--i;
slidesList.animate({ marginLeft: '+=' + slide.outerWidth(true) + 'px' }, 300);
}
}
}
});
旧的原始答案
http://jsfiddle.net/YmjF7/31/
var items = $('li');
var i = 0,
last = items.length -1;
$('#next').click(function(){
//increment i until it reaches the end of the array
if(i == last) {alert('end'); return false;} else {
i++;
i = i % items.length;
alert('Item '+ (i+1));
}
});
$('#prev').click(function(){
//decrease i until it reaches the beginning of the array
if(i == 0) {alert('beginning'); return false;} else {
--i;
i = i % items.length;
alert('Item '+ (i+1));
}
});
我对以下问题/答案给予了一些赞扬:
增加和减少变量,直到在javascript 中达到一个数字
jQuery每次单击都会附加不同的文本
相关文章:
- 是否有任何JavaScript UI组件可以显示字符串之间的差异
- 使用Booklet Jquery插件,我如何验证最后一页是否显示
- 是否可以用JavaScript显示等效的文件夹对话框
- 检查搜索结果是否存在多次如果是,则在Javascript中只显示一个结果
- 是否可以将JXBrowser显示的JS确认对话框的结果返回到调用它的JS部分
- 是否可以使用flexbox显示模型设置元素的滚动位置
- 隐藏/显示下面的分区根据是否选择某个选项进行选择
- 是否可以在不重新渲染的情况下显示/隐藏父对象中的元素
- 是否可以使用不同投影的另一个WMS层显示OSM数据
- 检查资源的id是否在ng重复中显示的另一个资源的id列表中
- 如何在将鼠标悬停在提交/锚点上时检查复选框是否已选中,并显示提示用户这样做的警报
- 在Chrome扩展程序中,是否可以截屏并在弹出窗口中显示屏幕
- 交换 img src 或显示/隐藏多个图像是否更快
- Javascript检查url是否存在并检查其上显示的一些信息
- 数据仅用于显示是否触摸输入 - AngularJs
- Javascript在单击外部时弹出隐藏,并显示是否单击了链接
- 弹出标记不显示是否已单击标记
- 显示是否所有输入都为空
- 显示是否隐藏jQuery
- 使用 Javascript 检查显示是否为无