嵌套 For 循环激活幻灯片并关闭另一个
Nested For Loop to activate slideshow and turn off another
我有多个幻灯片,但只想要一个 运行 按 ID 选择。其余的关闭并隐藏。
我有第一个加载onload。
我有一个嵌套的 for 循环 运行 通过并打开和关闭它们。
这不是一直有效。
网上找的一些代码。外层 for 循环甚至在选择任何 id 之前运行。
我什至不知道在激活新滑块之前是否正确停止了活动滑块。
我的循环似乎可以正常工作,只有警报,没有幻灯片代码。
然后,当我介绍幻灯片时,它有时会起作用,但并不始终如一。
选择 id 1 或 2 似乎可行,但有时它不会循环遍历嵌套的 3 或 4。
某种冲突还是逻辑错误?
请帮助这个绝望的初学者。我自愿为我们的合唱团做这件事
很抱歉,我无法正确格式化代码以供查看。
好的,我添加了 jsfiddle
https://jsfiddle.net/5s0q30s8/
循环仅使用警报。
<button id=1>Group Photos</button>
<button id=2>Miscellaneous</button>
<button id=3>Trips</button>
<button id=4>Old Pictures</button>
<script>
var buttons = document.getElementsByTagName("button");
var buttonsCount = buttons.length;
for (var i=0; i <= buttonsCount; i+=1){
buttons[i].onclick=function(e){
var id= this.id;
alert(id + ' clicked');
for (var i=1; i <= buttonsCount; i+=1){
alert('nested for' + i);
if (i != id) {
var temp = ('.slider-wrapper ' + i)
alert('Not id ' + temp);
$('.slider-wrapper' + i).hide();
/* $('#slider' + i).hide(); */
$('#slider' + i).data('nivoslider').stop();
}
else {
alert('true '+ i);
$('.slider-wrapper' + i).show();
$('#slider' + i).nivoSlider({ effect: 'fade' } );
} //end else
} //end nested for
};
} //end for
</script>
<div class="slider-wrapper1 theme-default">
<div id="slider1" class="nivoSlider">
<img src="images/Choir2014.jpg" alt="" title="2014" />
........More images.
</div>
</div>
<div class="slider-wrapper2 theme-default">
<div id="slider2" class="nivoSlider">
<img src="images/Choir2014.jpg" alt="" title="2014" />
........More images.
</div>
</div>
<div class="slider-wrapper3 theme-default">
<div id="slider3" class="nivoSlider">
<img src="images/Choir2014.jpg" alt="" title="2014" />
........More images.
</div>
</div>
<div class="slider-wrapper4 theme-default">
<div id="slider4" class="nivoSlider">
<img src="images/Choir2014.jpg" alt="" title="2014" />
........More images.
</div>
</div>
<script type="text/javascript">
$(window).load(function() {
$('#slider1').nivoSlider({ effect: 'fade' });
});
</script>
我必须说,你的代码在我眼里很乱。我确实看到您在使用 jQuery 方面做出了努力,所以我假设您能够使用它。
据我了解您的目标:
- 有 4 个滑块
- 有 4 个按钮
- 您单击一个按钮,相应的幻灯片就会出现。
$('#slideButtons button').click(function(){
var id = $(this).attr("id");
$('#content .slide:visible').hide();
$('#content #c' + id).show();
// Any other logic can be put here, like starting or stopping sliders.
});
/* Show the first slider, and hide everything else by applying display:none to it */
#content div:not(#c1) {
display:none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="slideButtons">
<button id="1">1</button>
<button id="2">2</button>
<button id="3">3</button>
<button id="4">4</button>
</div>
<div id="content">
<div class="slide" id="c1">Number 1! Put Slideshow 1 here.</div>
<div class="slide" id="c2">Number 2! Put Slideshow 2 here.</div>
<div class="slide" id="c3">Number 3! Put Slideshow 3 here.</div>
<div class="slide" id="c4">Number 4! Put Slideshow 4 here.</div>
</div>
从这里您可以构建它。我相信那时它看起来也会更干净。此外,如果您要调试那么多警报,请尝试使用 console.log
而不是 alert
。它的侵入性要小得多,您可以简单地阅读它。
我有多个幻灯片,但只想要一个 运行 按 ID 选择。其余的关闭并隐藏。 我有第一个加载onload。 我有一个嵌套的 for 循环 运行 通过并打开和关闭它们。 这不是一直有效。
网上找的一些代码。外层 for 循环甚至在选择任何 id 之前运行。
我什至不知道在激活新滑块之前是否正确停止了活动滑块。
我的循环似乎可以正常工作,只有警报,没有幻灯片代码。
然后,当我介绍幻灯片时,它有时会起作用,但并不始终如一。
选择 id 1 或 2 似乎可行,但有时它不会循环遍历嵌套的 3 或 4。
某种冲突还是逻辑错误?
请帮助这个绝望的初学者。我自愿为我们的合唱团做这件事
很抱歉,我无法正确格式化代码以供查看。
好的,我添加了 jsfiddle https://jsfiddle.net/5s0q30s8/
循环仅使用警报。
<button id=1>Group Photos</button>
<button id=2>Miscellaneous</button>
<button id=3>Trips</button>
<button id=4>Old Pictures</button>
<script>
var buttons = document.getElementsByTagName("button");
var buttonsCount = buttons.length;
for (var i=0; i <= buttonsCount; i+=1){
buttons[i].onclick=function(e){
var id= this.id;
alert(id + ' clicked');
for (var i=1; i <= buttonsCount; i+=1){
alert('nested for' + i);
if (i != id) {
var temp = ('.slider-wrapper ' + i)
alert('Not id ' + temp);
$('.slider-wrapper' + i).hide();
/* $('#slider' + i).hide(); */
$('#slider' + i).data('nivoslider').stop();
}
else {
alert('true '+ i);
$('.slider-wrapper' + i).show();
$('#slider' + i).nivoSlider({ effect: 'fade' } );
} //end else
} //end nested for
};
} //end for
</script>
<div class="slider-wrapper1 theme-default">
<div id="slider1" class="nivoSlider">
<img src="images/Choir2014.jpg" alt="" title="2014" />
........More images.
</div>
</div>
<div class="slider-wrapper2 theme-default">
<div id="slider2" class="nivoSlider">
<img src="images/Choir2014.jpg" alt="" title="2014" />
........More images.
</div>
</div>
<div class="slider-wrapper3 theme-default">
<div id="slider3" class="nivoSlider">
<img src="images/Choir2014.jpg" alt="" title="2014" />
........More images.
</div>
</div>
<div class="slider-wrapper4 theme-default">
<div id="slider4" class="nivoSlider">
<img src="images/Choir2014.jpg" alt="" title="2014" />
........More images.
</div>
</div>
<script type="text/javascript">
$(window).load(function() {
$('#slider1').nivoSlider({ effect: 'fade' });
});
</script>
我必须说,你的代码在我眼里很乱。我确实看到您在使用 jQuery 方面做出了努力,所以我假设您能够使用它。
据我了解您的目标:
- 有 4 个滑块
- 有 4 个按钮
- 您单击一个按钮,相应的幻灯片就会出现。
$('#slideButtons button').click(function(){
var id = $(this).attr("id");
$('#content .slide:visible').hide();
$('#content #c' + id).show();
// Any other logic can be put here, like starting or stopping sliders.
});
/* Show the first slider, and hide everything else by applying display:none to it */
#content div:not(#c1) {
display:none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="slideButtons">
<button id="1">1</button>
<button id="2">2</button>
<button id="3">3</button>
<button id="4">4</button>
</div>
<div id="content">
<div class="slide" id="c1">Number 1! Put Slideshow 1 here.</div>
<div class="slide" id="c2">Number 2! Put Slideshow 2 here.</div>
<div class="slide" id="c3">Number 3! Put Slideshow 3 here.</div>
<div class="slide" id="c4">Number 4! Put Slideshow 4 here.</div>
</div>
从这里您可以构建它。我相信那时它看起来也会更干净。此外,如果您要调试那么多警报,请尝试使用 console.log
而不是 alert
。它的侵入性要小得多,您可以简单地阅读它。