使用 javascript 模数通过 for 循环遍历文本滑块
我是 jQuery 和堆栈溢出的新手,所以我会尝试具体说明,但请耐心等待。我正在尝试从头开始创建一个带有关联链接的文本滑块,使用模数迭代列表并重复。
这是我正在使用的代码:
ul#text { position: relative; margin-bottom: 40px; height: 40px; }
ul#text li { position: absolute; display: none; }
.active { font-weight: bold; }
<ul id="text">
<li id="textBody">Suffering is not a result of physical pain alone. It can be compounded by changes in one's life, and changes in the self. <em>We understand, and we can help.</em></li>
<li id="textFamily">Aggressive assessment of physical symptoms & pain in the body are key to support <em>the best possible quality of life</em>.</li>
<li id="textFunction">Chronic pain & illness may affect your role in your family. We work with you and your family as you confront those changes.</li>
<li id="textPsyche">Chronic pain and illness make even everyday activities challenging. We will help you maintain independence and physical function.</li>
<li id="textSuffering">Changes in the physical body mean changes in the self. We will provide support as you navigate those changes in the psyche.</li>
</ul>
<ul id="vivid_buttons">
<li><a href="#" id="buttonBody">BODY</a></li>
<li><a href="#" id="buttonFamily" class="active">FAMILY</a></li>
<li><a href="#" id="buttonFunction">FUNCTION</a></li>
<li><a href="#" id="buttonPsyche">PSYCHE</a></li>
<li><a href="#" id="buttonSuffering">SUFFERING</a></li>
</ul>
$(document).ready(function () {
function fadeAndMove() {
var nextLi = $("#text > li:nth-child(" + i % 5 + ")");
var nextA = $("#vivid_buttons > li:nth-child(" + i % 5 + ") > a");
nextLi.fadeIn(1000, function () {
$("#vivid_buttons > li > a").removeClass("active");
nextA.addClass("active");
setTimeout(function () {
nextLi.fadeOut(1000);
}, 4000);
});
}
for (i = 1; i < 7; i++) {
fadeAndMove($("#text"));
}
});
用简单的语言来说,我想淡入第一个列表中的一个句子,并突出显示底部列表中的相应链接。然后我希望它淡出并移至下一个项目。
我以为我可以使用模数 (%) 和 for 循环来迭代并创建一个无限循环,但是当我将其放入时,它就像一次执行所有内容,而不是对每个项目迭代(淡入和淡出)。
我知道这很令人困惑,但我希望能得到任何帮助。
I'm new to jQuery and stack overflow, so I'll try to be specific, but please bear with me. I'm trying to create a text slider with associated links from scratch, using modulus to iterate through the list and repeat.
Here's the code I'm working with:
ul#text { position: relative; margin-bottom: 40px; height: 40px; }
ul#text li { position: absolute; display: none; }
.active { font-weight: bold; }
<ul id="text">
<li id="textBody">Suffering is not a result of physical pain alone. It can be compounded by changes in one's life, and changes in the self. <em>We understand, and we can help.</em></li>
<li id="textFamily">Aggressive assessment of physical symptoms & pain in the body are key to support <em>the best possible quality of life</em>.</li>
<li id="textFunction">Chronic pain & illness may affect your role in your family. We work with you and your family as you confront those changes.</li>
<li id="textPsyche">Chronic pain and illness make even everyday activities challenging. We will help you maintain independence and physical function.</li>
<li id="textSuffering">Changes in the physical body mean changes in the self. We will provide support as you navigate those changes in the psyche.</li>
</ul>
<ul id="vivid_buttons">
<li><a href="#" id="buttonBody">BODY</a></li>
<li><a href="#" id="buttonFamily" class="active">FAMILY</a></li>
<li><a href="#" id="buttonFunction">FUNCTION</a></li>
<li><a href="#" id="buttonPsyche">PSYCHE</a></li>
<li><a href="#" id="buttonSuffering">SUFFERING</a></li>
</ul>
$(document).ready(function () {
function fadeAndMove() {
var nextLi = $("#text > li:nth-child(" + i % 5 + ")");
var nextA = $("#vivid_buttons > li:nth-child(" + i % 5 + ") > a");
nextLi.fadeIn(1000, function () {
$("#vivid_buttons > li > a").removeClass("active");
nextA.addClass("active");
setTimeout(function () {
nextLi.fadeOut(1000);
}, 4000);
});
}
for (i = 1; i < 7; i++) {
fadeAndMove($("#text"));
}
});
In simple language, I want to fade in a sentence from the first list, and highlight the corresponding link on the bottom list. I then want it to fade out and move to the next item.
I thought I could use modulus (%) and a for loop to iterate through and create an infinite loop, but when I put this in it's like it executes everything all at once, not iterating through (fading in and out) for each item.
I know this is confusing, but I'd appreciate any help I could get.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
摆脱
for
循环,只需让 setTimeout 调用fadeAndMove()
函数,并传递当前索引。示例: http://jsfiddle.net/drWhE/
Get rid of the
for
loop, and just have the setTimeout call thefadeAndMove()
function, passing the current index.Example: http://jsfiddle.net/drWhE/
一切都会立即动画化,因为您的主循环继续运行,而淡出计时器则等待四秒钟。
大致如下(每行代表一秒):
要解决该问题,您需要在延迟函数中淡出当前项后立即链接对
fadeAndMove()
的下一个调用:(由于这是一个延迟调用,因此它不是递归的,无限循环不会破坏堆栈。)
Everything animates at once because your main loop keeps running while your fadeout timers wait four seconds.
Schematically, it goes like this (each line represents one second):
To solve the problem, you need to chain the next call to
fadeAndMove()
right after fading out the current item in your delayed function:(Since that's a delayed call, it's not recursive. The infinite loop won't smash the stack.)
这是获取所需内容的一种方法:
这是小提琴。
而且......橙色条告诉我帕特里克·DW 击败了我类似的东西。好吧,无论如何,它就在这里。
Here's one way to get what you're looking for:
Here's the fiddle.
And... the orange bar tells me patrick dw beat me to something similar. Well, here it is anyway.