Javascript 幻灯片放映-连续循环
在此方面的任何帮助都将不胜感激 我正在尝试从以下位置实现脚本: 但我想让它不断循环,我已经设法让它来回循环:Javascript 幻灯片放映-连续循环,javascript,Javascript,在此方面的任何帮助都将不胜感激 我正在尝试从以下位置实现脚本: 但我想让它不断循环,我已经设法让它来回循环: var totalSlides = 0; var currentSlide = 1; var contentSlides = ""; $(document).ready(function(){ $("#slideshow-previous").click(showPreviousSlide); $("#slideshow-next").click(showNext
var totalSlides = 0;
var currentSlide = 1;
var contentSlides = "";
$(document).ready(function(){
$("#slideshow-previous").click(showPreviousSlide);
$("#slideshow-next").click(showNextSlide);
var totalWidth = 0;
contentSlides = $(".slideshow-content");
contentSlides.each(function(i){
totalWidth += this.clientWidth;
totalSlides++;
});
$("#slideshow-holder").width(totalWidth);
$("#slideshow-scroller").attr({scrollLeft: 0});
updateButtons();
});
function showPreviousSlide()
{
currentSlide--;
if (currentSlide < 1) currentSlide = totalSlides;
updateContentHolder();
updateButtons();
}
function showNextSlide()
{
currentSlide++;
if (currentSlide > totalSlides) currentSlide = 1;
updateContentHolder();
updateButtons();
}
function updateContentHolder()
{
var scrollAmount = 0;
contentSlides.each(function(i){
if(currentSlide - 1 > i) {
scrollAmount += this.clientWidth;
}
});
$("#slideshow-scroller").animate({scrollLeft: scrollAmount}, 1000);
}
function updateButtons()
{
if(currentSlide < totalSlides) {
$("#slideshow-next").show();}
if(currentSlide > 1) {
$("#slideshow-previous").show();}
}
var-totalSlides=0;
var currentSlide=1;
var=”;
$(文档).ready(函数(){
$(“#幻灯片放映上一页”)。单击(showPreviousSlide);
$(“#幻灯片放映下一步”)。单击(showNextSlide);
var totalWidth=0;
内容幻灯片=$(“.slideshow内容”);
内容幻灯片。每个(功能(i){
totalWidth+=this.clientWidth;
totalSlides++;
});
$(“#幻灯片支架”).width(总宽度);
$(“#幻灯片滚动条”).attr({scrollLeft:0});
updateButtons();
});
函数showPreviousSlide()
{
当前幻灯片--;
如果(currentSlide<1)currentSlide=totalSlides;
updateContentHolder();
updateButtons();
}
函数showNextSlide()
{
currentSlide++;
如果(currentSlide>totalSlides)currentSlide=1;
updateContentHolder();
updateButtons();
}
函数updateContentHolder()
{
风险价值金额=0;
内容幻灯片。每个(功能(i){
如果(当前幻灯片-1>i){
scrollAmount+=this.clientWidth;
}
});
$(“#幻灯片滚动条”).animate({scrollLeft:scrollAmount},1000);
}
函数updateButtons()
{
如果(当前幻灯片<总幻灯片){
$(“#幻灯片放映下一步”).show();}
如果(当前幻灯片>1){
$(“#幻灯片放映上一页”).show();}
}
我已经看了两个晚上了,没办法解决这个问题
有人能帮忙吗
提前感谢。我必须从头开始创建类似的东西,使用ExtJS,我问其中包含我最终使用的JavaScript源代码,但最终它基于。可以说,“自己滚”是相当容易的,但是有很多jQuery选项供您尝试 希望这有帮助 戴夫, 幻灯片“乒乓球”的原因是 $(“#幻灯片滚动条”).animate({scrollLeft:scrollAmount},1000) 当你击中末端时,只需指向原始位置,然后在那里设置动画 试试这个: css的变化如此之大
.slideshow-content {
float: left;
position: absolute;
}
// it's nice to work with 0 indexed counters
var totalSlides = -1;
var currentSlide = 0;
var contentSlides = "";
$(document).ready(function(){
$("#slideshow-previous").click(showPreviousSlide);
$("#slideshow-next").click(showNextSlide);
var totalWidth = 0;
contentSlides = $(".slideshow-content");
contentSlides.each(function(i){
totalSlides++;
//each element is hidden until needed
$(this).css('left', -100000);
});
//set the position of the first slide
$(contentSlides[0]).css('left', 0);
updateButtons();
});
function showPreviousSlide()
{
updateSlides( -1 );
currentSlide--;
if (currentSlide < 0) currentSlide = totalSlides;
updateButtons();
}
function showNextSlide()
{
updateSlides( 1 );
currentSlide++;
if (currentSlide > totalSlides) currentSlide = 0;
updateButtons();
}
function updateSlides( direction )
{
var scrollAmount = 0;
var currSlideObj = contentSlides[ currentSlide ];
var nextSlideObj = contentSlides[ getNextSlide( direction ) ];
$( contentSlides ).each( function(){
if ( this != currSlideObj && this != nextSlideObj ) {
//each element is hidden until needed
$(this).css('left', -100000);
}
});
if ( direction > 0 ) {
//set the position of the next slide when 'next' pushed
$( nextSlideObj ).css('left', parseInt($( currSlideObj ).css('left')) + $( currSlideObj ).width());
//set the amount to animate
scrollAmount = parseInt($( currSlideObj ).css('left')) - $( currSlideObj ).width();
} else {
//set the position of the next slide when 'previous' pushed
$( nextSlideObj ).css('left', parseInt($( currSlideObj ).css('left')) - $( nextSlideObj ).width());
//set the amount to animate
scrollAmount = parseInt($( currSlideObj ).css('left')) + $( currSlideObj ).width();
}
// we'll animate the slide objects independently
$( currSlideObj ).animate({left: scrollAmount}, 1000);
$( nextSlideObj ).animate({left: 0}, 1000);
}
function getNextSlide( direction )
{
if ( ( currentSlide + direction ) > totalSlides ) {
return 0;
} else if ( ( currentSlide + direction ) < 0 ) {
return totalSlides;
}
return currentSlide + direction;
}
function updateButtons()
{
if(currentSlide < totalSlides) {
$("#slideshow-next").show();}
if(currentSlide > 0) {
$("#slideshow-previous").show();}
}
javascript的变化如此之大
.slideshow-content {
float: left;
position: absolute;
}
// it's nice to work with 0 indexed counters
var totalSlides = -1;
var currentSlide = 0;
var contentSlides = "";
$(document).ready(function(){
$("#slideshow-previous").click(showPreviousSlide);
$("#slideshow-next").click(showNextSlide);
var totalWidth = 0;
contentSlides = $(".slideshow-content");
contentSlides.each(function(i){
totalSlides++;
//each element is hidden until needed
$(this).css('left', -100000);
});
//set the position of the first slide
$(contentSlides[0]).css('left', 0);
updateButtons();
});
function showPreviousSlide()
{
updateSlides( -1 );
currentSlide--;
if (currentSlide < 0) currentSlide = totalSlides;
updateButtons();
}
function showNextSlide()
{
updateSlides( 1 );
currentSlide++;
if (currentSlide > totalSlides) currentSlide = 0;
updateButtons();
}
function updateSlides( direction )
{
var scrollAmount = 0;
var currSlideObj = contentSlides[ currentSlide ];
var nextSlideObj = contentSlides[ getNextSlide( direction ) ];
$( contentSlides ).each( function(){
if ( this != currSlideObj && this != nextSlideObj ) {
//each element is hidden until needed
$(this).css('left', -100000);
}
});
if ( direction > 0 ) {
//set the position of the next slide when 'next' pushed
$( nextSlideObj ).css('left', parseInt($( currSlideObj ).css('left')) + $( currSlideObj ).width());
//set the amount to animate
scrollAmount = parseInt($( currSlideObj ).css('left')) - $( currSlideObj ).width();
} else {
//set the position of the next slide when 'previous' pushed
$( nextSlideObj ).css('left', parseInt($( currSlideObj ).css('left')) - $( nextSlideObj ).width());
//set the amount to animate
scrollAmount = parseInt($( currSlideObj ).css('left')) + $( currSlideObj ).width();
}
// we'll animate the slide objects independently
$( currSlideObj ).animate({left: scrollAmount}, 1000);
$( nextSlideObj ).animate({left: 0}, 1000);
}
function getNextSlide( direction )
{
if ( ( currentSlide + direction ) > totalSlides ) {
return 0;
} else if ( ( currentSlide + direction ) < 0 ) {
return totalSlides;
}
return currentSlide + direction;
}
function updateButtons()
{
if(currentSlide < totalSlides) {
$("#slideshow-next").show();}
if(currentSlide > 0) {
$("#slideshow-previous").show();}
}
//使用0个索引计数器很好
var totalSlides=-1;
var currentSlide=0;
var=”;
$(文档).ready(函数(){
$(“#幻灯片放映上一页”)。单击(showPreviousSlide);
$(“#幻灯片放映下一步”)。单击(showNextSlide);
var totalWidth=0;
内容幻灯片=$(“.slideshow内容”);
内容幻灯片。每个(功能(i){
totalSlides++;
//每个元素在需要之前都是隐藏的
$(this.css('left',-100000);
});
//设置第一张幻灯片的位置
$(contentSlides[0]).css('left',0);
updateButtons();
});
函数showPreviousSlide()
{
更新滑块(-1);
当前幻灯片--;
如果(currentSlide<0)currentSlide=totalSlides;
updateButtons();
}
函数showNextSlide()
{
更新滑块(1);
currentSlide++;
如果(currentSlide>totalSlides)currentSlide=0;
updateButtons();
}
函数更新滑动(方向)
{
风险价值金额=0;
var currSlideObj=contentSlides[currentSlide];
var nextSlideObj=contentSlides[getNextSlide(方向)];
$(内容幻灯片)。每个(函数(){
if(this!=currSlideObj&&this!=nextSlideObj){
//每个元素在需要之前都是隐藏的
$(this.css('left',-100000);
}
});
如果(方向>0){
//按下“下一步”时设置下一张幻灯片的位置
$(nextSlideObj).css('left',parseInt($(currSlideObj).css('left'))+$(currSlideObj.width());
//设置要设置动画的数量
scrollAmount=parseInt($(currSlideObj.css('left'))-$(currSlideObj.width();
}否则{
//设置按下“上一张”时下一张幻灯片的位置
$(nextSlideObj.css('left',parseInt($(currSlideObj.css('left'))-$(nextSlideObj.width());
//设置要设置动画的数量
scrollAmount=parseInt($(currSlideObj.css('left'))+$(currSlideObj.width();
}
//我们将独立设置幻灯片对象的动画
$(currSlideObj).animate({left:scrollAmount},1000);
$(nextSlideObj).animate({left:0},1000);
}
函数getNextSlide(方向)
{
如果((当前幻灯片+方向)>总幻灯片){
返回0;
}否则如果((当前滑动+方向)<0){
返回幻灯片;
}
返回电流滑动+方向;
}
函数updateButtons()
{
如果(当前幻灯片<总幻灯片){
$(“#幻灯片放映下一步”).show();}
如果(当前幻灯片>0){
$(“#幻灯片放映上一页”).show();}
}
下面是它的工作原理:
每个元素都隐藏在屏幕外,直到需要时才显示出来
当按下按钮时
必须一起移动的两个图像被识别
他们的位置已经设置好,所有其他人都会再次隐藏在屏幕外
它们被设置为新位置的动画
我还对大多数索引测试进行了转换,使它们以零为基础,这就是大多数现代语言喜欢解释集合索引的方式
仅供参考,我预计totalSlides会增加到2,但会增加到3,
因此,将其设置为-1会让人感觉不舒服-可能需要一种不同的循环结构
叫什么的
另外,请注意,我只在Firefox上测试过这一点,所以您的里程可能会有所不同。为什么不使用现有的jQuery插件来实现这一点?外面有很多。首先:,…非常感谢你们两位回复我的帖子。几乎到了——ajaxalex——你的解决方案非常有效。然而,我的页面上有多张“幻灯片”。幻灯片放映区域是窗口宽度的100%,因此我需要在任何时候至少看到3或4张幻灯片,有什么想法吗?这个解决方案并没有针对多张幻灯片进行优化,但蛮力方法是复制