我试图让每个元素的类自动按顺序一次更改一个。这意味着元素1发光然后随着元素2发光然后熄灭等等而消失。当整个序列重新开始时,每个元素都会闪烁。
$('header div:first').toggleClass('highlight').nextAll().toggleClass('none');
function highlight() {
var $off = $('header div.highlight').toggleClass('none');
if ($off.next().length) {
$off.next().toggleClass('none');
} else {
$off.prevAll().last().toggleClass('highlight');
}
}
$(document).ready(function() {
setInterval(highlight, 1000);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<header>
<div>element 1</div>
<div>element 2</div>
<div>element 3</div>
<div>element 4</div>
</header>
它不会按预期工作(元素2到4同时突出显示所有内容,然后在元素1完全没有变化时关闭)我不知道为什么。我做错了什么?
答案 0 :(得分:4)
所以是的,你不需要.none
。只需使用您的默认样式和.highlight
类
获取项目数,创建c
计数器,增加它并使用%
提醒操作员循环它:
jQuery(function( $ ) { // DOM is ready
var $el = $("header>div"), tot = $el.length, c = 0;
$el.eq(c).addClass("highlight"); // initial highlight
setInterval(function() {
$el.removeClass("highlight").eq(++c%tot).addClass("highlight");
}, 1000);
});
&#13;
header > div { transition:0.5s; -webkit-transition:0.5s; }
header > div.highlight { color:#f0f; }
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<header>
<div>element 1</div>
<div>element 2</div>
<div>element 3</div>
<div>element 4</div>
</header>
&#13;
一些文档:
https://api.jquery.com/eq/
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Remainder_()
答案 1 :(得分:3)
按.none
更改.highlight
,如下所示:
$('header div:first').toggleClass('highlight');
function highlight() {
var $off = $('header div.highlight').toggleClass('highlight');
if ($off.next().length) {
$off.next().toggleClass('highlight');
} else {
$off.prevAll().last().toggleClass('highlight');
}
}
$(document).ready(function() {
setInterval(highlight, 1000);
});
.highlight {
color:red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<header>
<div>element 1</div>
<div>element 2</div>
<div>element 3</div>
<div>element 4</div>
</header>
$('header div:first').toggleClass('highlight');
setInterval(function() {
var abc = "highlight";
$off = $('header div.' + abc),
$next = $off.next().length ? $off.next() : $off.prevAll().last();
$off.toggleClass(abc);
$next.toggleClass(abc);
}, 1000);
.highlight {
color:red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<header>
<div>element 1</div>
<div>element 2</div>
<div>element 3</div>
<div>element 4</div>
</header>
答案 2 :(得分:3)
none
类以及toggleClass()
调用可能会让您感到有些困惑。只需通过div.highlight
跟踪当前突出显示的元素并使用下面的更新代码确定下一个要定位的元素,您可能会感觉更好:
function highlight() {
// Remove the highlight from all options
var $current = $('div.highlight');
// Store the next one
var $next = $current.next('div');
// Remove all highlighting
$('div.highlight').removeClass('highlight')
if($next.length){
$next.addClass('highlight');
} else {
$('header div:first').addClass('highlight');
}
}
// When the document is ready
$(function() {
// Initially set your first element as highlighted and start your interval
$('header div:first').addClass('highlight');
setInterval(highlight, 1000);
});
示例强>
你可以see an example of this in action here并在下面演示:
图片仅供参考,时间可能与执行的实际代码不同... :)
答案 3 :(得分:1)
你可以尝试这种方法。
<强>的Javascript 强>
var highlight = function(){
$('header div').removeClass('highlight');
$('header div').each(function(i,v) {
setTimeout(function(){$(v).prev().toggleClass('highlight');$(v).toggleClass('highlight');}, i*1000);
});
setTimeout(highlight, ($('header div').length)*1000);
};
highlight();