我可以通过上/下箭头导航这个垂直幻灯片。幻灯片放映容器div中有7个项目(div),但一次只能显示其中的3个。事实上,这个幻灯片是一个菜单 - 从可见的3个项目中,中间的一个是可点击的,它将在页面的其他地方加载内容。
现在,由于有3个项目,只有第2个项目(中间的一个)是可点击的,我需要在它们之间创建差异。所以,我想要改变项目border / border-radius,如下所示:
问题在于我不知道如何做到这一点,因为div在可见区域不断变换位置。 我真的需要帮助。
HTML标记:
<div id="rocksType_btns">
<div id="rocksType_btnUp"></div>
<div id="rocksType_btnDown"></div>
</div>
<div id="rocksType_subtypeSlider">
<div id="rocksType_DBitems_container">
<div id="rocksType_DB_1" class="rocksType_DBitem">Item 1</div>
<div id="rocksType_DB_2" class="rocksType_DBitem">Item 2</div>
<div id="rocksType_DB_3" class="rocksType_DBitem">Item 3</div>
<div id="rocksType_DB_4" class="rocksType_DBitem">Item 4</div>
<div id="rocksType_DB_5" class="rocksType_DBitem">Item 5</div>
<div id="rocksType_DB_6" class="rocksType_DBitem">Item 6</div>
<div id="rocksType_DB_7" class="rocksType_DBitem">Item 7</div>
</div>
</div> <!-- End of id="rocksMenu_subtypeSlider" -->
我已经为before / current / after状态定义了CSS代码 - 只需要分配它们。
这是Fiddle。
感谢名单。
佩德罗
答案 0 :(得分:5)
尝试这样的事情......
HTML:
<div id="viewport">
<ul id="list">
<li class="above">Foo</li>
<li class="selected">Bar</li>
<li class="below">Barf</li>
<li>Boo</li>
<li>Huh</li>
<li>Wha</li>
<li>Oh</li>
</ul>
</div>
<a href="#" id="up">UP</a> -- <a href="#" id="down">DOWN</a>
CSS:
#viewport{
height: 175px;
overflow: hidden;
padding: 0;
}
ul{
list-style-type: none;
padding: 0;
margin: 0;
}
li{
border: 1px solid #ccc;
width: 70px;
height: 50px;
line-height: 50px;
padding: 0 0 0 30px;
margin: 5px;
font-size: 1.5em;
color: #999;
background-color: #fed;
}
li.selected{
border-radius: 20px;
background-color: #fe0
}
li.above{
border-radius: 10px;
border-top-left-radius: 35px;
}
li.below{
border-radius: 10px;
border-bottom-left-radius: 35px;
}
JS:
var viewport = $('#viewport'),
list = $('#list'),
itemHeight = $('li', list).first().outerHeight(),
btnUp = $('#up'),
btnDown = $('#down'),
busy = false,
selected, above, below;
var update = function(){
selected = $('li:nth-of-type(2)', list).addClass('selected', 200);
above = selected.prev().addClass('above', 200);
below = selected.next().addClass('below', 200);
setTimeout(function(){ busy = false; }, 200);
};
var goUp = function(){
if(busy) return; else busy = true;
$('li', list).removeClass('selected above below');
list.animate({marginTop: -itemHeight}, 600, 'easeOutBounce', function(){
list.css({marginTop: 0}).append($('li', list).first());
update();
});
}
var goDown = function(){
if(busy) return; else busy = true;
$('li', list).removeClass('selected above below');
list
.css({marginTop: -itemHeight})
.prepend($('li',list).last())
.animate({marginTop: 0}, 600, 'easeOutBounce', update);
}
btnUp.on('click', goUp);
btnDown.on('click', goDown);
Fiddle here。 Slightly fancier version
我认为这样做的唯一方法是跟踪什么是,而不是围绕动画构建它。
答案 1 :(得分:2)
查看我的更改。
更新:链接包括管理上一课和下一课的风格
更新:链接以删除花哨的颜色
这是我改变的,显然造型仍有待完成:
在up方法中:
$('.rocksType_DBitem').removeClass('current');
$('.rocksType_DBitem').removeClass('before');
$('.rocksType_DBitem').removeClass('after');
var middleRock = rocksType_place;
rocksType_place--;
$('#rocksType_DBitems_container :eq(' + middleRock + ')').addClass('current');
$('.current').prevAll().addClass('before');
$('.current').nextAll().addClass('after');
在down方法中:
$('.rocksType_DBitem').removeClass('current');
$('.rocksType_DBitem').removeClass('before');
$('.rocksType_DBitem').removeClass('after');
rocksType_place++;
var middleRock = rocksType_place + 1;
$('#rocksType_DBitems_container :eq(' + middleRock + ')').addClass('current');
$('.current').prevAll().addClass('before');
$('.current').nextAll().addClass('after');
公共代码可以重构为诸如清理我们添加的类的功能
答案 2 :(得分:1)
我会分配3 CSS
个类.before
,.current
和.after
,并在移动项目时将其移动。您可以将边框设置分配给这些类。
以下是一个示例小提琴:http://jsfiddle.net/DBBVU/3/
答案 3 :(得分:0)
如果您可以管理三个可见的div获得额外的类,则可以将CSS应用于它们以更改边框半径。我猜幻灯片是用一些javascript创建的?如果是,你可以查看代码并尝试找出将不同的CSS类分配给3个div。
答案 4 :(得分:0)
最好的方法是在中间div上分配一个带有不同边框的css类。因为它是可点击的,所以你知道它在哪里。然后你以同样的方式删除它。