我正在尝试构建一个水平滚动网站,带有向前和向后箭头(你可以在这里查看粗略的js小提琴:http://jsfiddle.net/KcDqu/5/)
这是我到目前为止的jquery:
$(document).ready(function() {
$('a.right-arrow').click(function() {
$('section').animate({
marginLeft: "+=920"
}, "medium");
});
$('a.left-arrow').click(function() {
$('section').animate({
marginLeft: "-=920"
}, "medium");
});
});
到目前为止,此工作正常。但是,我想要添加两件事。首先,在初始显示时,应该没有向左箭头,因为没有内容可以向左查看,我不希望用户只是滚动到空白区域。
其次,我希望隐藏右箭头,当出于同样的原因没有更多内容显示在右侧时。
似乎无法找出最佳方法......
非常感谢任何帮助。
答案 0 :(得分:0)
您可以使用部分的margin-left
值并将其用于写入条件。不要忘记在animate函数的回调函数中使用条件来获得准确的值。
$(document).ready(function() {
var windowWidth = $(window).width();
var maxRange = windowWidth * -2;
//note: all of the conditions are same
var val = parseInt($('section').css('margin-left'));
if( val >= 0 ) { $('.right-arrow').hide();$('.left-arrow').show(); }
else if( val < 0 && val > maxRange) { $('.right-arrow, .left-arrow').show(); }
else if( val <= maxRange) { $('.left-arrow').hide();$('.right-arrow').show(); }
$('a.right-arrow').click(function() {
$('section').animate({ marginLeft: "+=" +windowWidth+ "px" },600,function() {
var val = parseInt($('section').css('margin-left'));
if( val >= 0 ) { $('.right-arrow').hide();$('.left-arrow').show(); }
else if( val < 0 && val > maxRange) { $('.right-arrow, .left-arrow').show(); }
else if( val <= maxRange) { $('.left-arrow').hide();$('.right-arrow').show(); }
});
});
$('a.left-arrow').click(function() {
$('section').animate({ marginLeft: "-=" +windowWidth+ "px" },600,function() {
var val = parseInt($('section').css('margin-left'));
if( val >= 0 ) { $('.right-arrow').hide();$('.left-arrow').show(); }
else if( val < 0 && val > maxRange) { $('.right-arrow, .left-arrow').show(); }
else if( val <= maxRange) { $('.left-arrow').hide();$('.right-arrow').show(); }
});
});
});
请注意,在这些情境中不要使用else
,否则可能会产生冲突。
答案 1 :(得分:0)
代码有点困难,因为你的水平幻灯片被硬编码为920并且并不总是窗口的宽度。这会导致某些内容被跳过,具体取决于窗口的大小。
使用此jQuery使箭头正常工作:
$(document).ready(function () {
var leftMargin = 0;
var width = $(document).width();
var windowWidth = $(window).width();
$('.left-arrow').click(function () {
$('section').animate({
marginLeft: "+=" + windowWidth
}, "medium");
$('.right-arrow').show();
leftMargin = (leftMargin - windowWidth)
if (leftMargin == 0) {
$('.left-arrow').hide();
}
});
$('.right-arrow').click(function () {
$('section').animate({
marginLeft: "-=" + windowWidth
}, "medium");
$('.left-arrow').show();
leftMargin = (leftMargin + windowWidth);
if (leftMargin > width - windowWidth) {
$('.right-arrow').hide();
}
});
});
这也会将箭头设置为滑动到窗口的宽度,因此不会遗漏任何内容。
编辑:删除了其他不需要的内容。
答案 2 :(得分:0)
通常情况下,我会给你一些现有滑块脚本的链接,但我不知道有任何处理调整大小。
所以我从我自己的PHP异常处理程序中调整了一些代码:)
$('#list').each(function(){
var list = $(this),
currentPos = 0,
itemCount = list.children().length;
$('.right, .left').click(function(){
// +100 = right, -100 = left
var direction = $(this).hasClass('right') ? 100 : -100,
nextIndex = direction > 0 ? currentPos + 1 : currentPos - 1;
// do nothing if there is animation happening,
// or if index is out of boundaries
if($('> li', list).is(':animated')
|| (direction > 0 && nextIndex > itemCount - 1)
|| (direction < 0 && nextIndex < 0)
) return;
var next = $('> li:eq(' + nextIndex + ')', list),
current = $('> li:eq(' + currentPos + ')', list);
currentPos = nextIndex;
// determine if the link needs to be hidden
$('.left, .right').removeClass('hide');
if(currentPos === 0 || currentPos === itemCount - 1)
$(this).addClass('hide');
// adjust height of the container
list.css('height', Math.max(current.outerHeight(true), next.outerHeight(true)) + 'px');
// make the current slide absolute
current.css({
position: 'absolute',
left: 0,
top: 0,
width: '100%',
height: current.outerHeight(true) + 'px'
});
// show the next slide
next.css({
position: 'absolute',
left: direction + '%',
top: 0,
width: '100%',
height: next.outerHeight(true) + 'px'
}).show().animate({left: '0%'}, 300, 'swing', function(){
next.css({
position: 'relative',
left: 'auto',
top: 'auto'
});
});
// hide the current slide
current.animate({left: (-direction) + '%'}, 300, 'swing', function(){
current.hide();
});
});
// mouse wheel action within the list area
list.mousewheel(function(event, delta){
(delta > 0) ? $('.right').click() :$('.left').click();
});
});
CSS:
.hide{
display:none;
}
#list{
position: relative;
width: 100%;
overflow: hidden;
}
#list > li{
display: none;
}
#list > li:first-child{
display: block;
}
HTML结构应如下所示:
<a class="left"> left </a>
<a class="right"> right </a>
<ul id="list">
<li> ... </li>
...
</ul>
mousewheel jQuery插件。如果您不需要鼠标滚轮支持,请删除最后一个事件。