jquery 幻灯片 最后一张图片切换到第一张不是按照顺序播放 求解

星耀学园 2015-07-14 10:29:14
现在遇到的问题 幻灯切换图都是向右滑动的 用的是margin-left 值来显示对应的图片 整个是一个UL列表 整个一列里控制位置margin-left来向右滚动 问题是 到了最后一张图片 要切换第一张图片的时候 margin-left 就为0 也是从UL 定位的最后要转到0这个位置,就是反方向转了 我想一直向右切换 请问应该怎么做呢 下面是代码

请问这个思路是什么呢 现在是通过UL 定位margin-left 向右滚动 最后一张图片到第一张 要从最后到0的位置肯定是向左滚动 求个解决思路 先谢谢大神~

用的jquery

JS

$(function() {
jQuery.focus = function(slid) {

var first =$(slid+"ul li").eq(0).html();
console.log(first)
var content ="<li>"+first+"</li>";
$(slid+"ul:first").append(content);


var sWidth = $(slid).width(); //获取焦点图的宽度(显示面积)


var len = $(slid).find("ul li").length; //获取焦点图个数
var index = 0;
var picTimer;
/*为图片添加可视宽度*/
$(slid).find('ul li a img').css({"width":sWidth});


//以下代码添加数字按钮和按钮后的半透明条,还有上一页、下一页两个按钮
var btn = "<div class='btnBg'></div><div class='btn'>";
for(var i=0; i < len; i++) {
var ii = i+1;
btn += "<span>"+ii+"</span>";
}
btn += "</div><div class='preNext pre'></div><div class='preNext next'></div>";
$(slid).append(btn);
$(slid).find("div.btnBg").css("opacity",0.5);

//为小按钮添加鼠标滑入事件,以显示相应的内容
$(slid+" div.btn span").css("opacity",0.4).mouseenter(function() {
index = $(slid+" .btn span").index(this);
showPics(index);
}).eq(0).trigger("mouseenter");

//上一页、下一页按钮透明度处理
$(slid+" .preNext").css("opacity",0.2).hover(function() {
$(this).stop(true,false).animate({"opacity":"0.5"},300);
},function() {
$(this).stop(true,false).animate({"opacity":"0.2"},300);
});

//上一页按钮
$(slid+" .pre").click(function() {
index -= 1;
if(index == -1) {index = len - 1;}
showPics(index);
});

//下一页按钮
$(slid+" .next").click(function() {
index += 1;
if(index == len) {
index = 0;}

showPics(index);
});



//左右滚动,即所有li元素都是在同一排向左浮动,所以这里需要计算出外围ul元素的宽度
$(slid+" ul").css("width",sWidth * (len));

//鼠标滑上焦点图时停止自动播放,滑出时开始自动播放
$(slid).hover(function() {
clearInterval(picTimer);
},function() {
picTimer = setInterval(function() {
showPics(index);
index++;
if(index == len) {index = 0;}
},4000); //此4000代表自动播放的间隔,单位:毫秒
}).trigger("mouseleave");

//显示图片函数,根据接收的index值显示相应的内容
function showPics(index) { //普通切换
var nowLeft = -index*sWidth; //根据index值计算ul元素的left值

$(slid+" ul").stop(true,false).animate({"left":nowLeft},300); //通过animate()调整ul元素滚动到计算出的position
$(slid+" .btn span").removeClass("on").eq(index).addClass("on"); //为当前的按钮切换到选中的效果
$(slid+" .btn span").stop(true,false).animate({"opacity":"0.4"},300).eq(index).stop(true,false).animate({"opacity":"1"},300); //为当前的按钮切换到选中的效果
}

};

});


HTML

<div class="focus" id="focus001">
<ul>
<li><a href="#" target="_blank"><img src="images/slide.png" height="520" /></a>
<div class="slide-text">
<p class="slide-text-header">标题11111111111111111111111111111</p>
<p class="slide-text-content">内容1111111111111111111111111111111111111111111111111111111111111111</p>
</div>
</li>
<li>
<a href="#" target="_blank"><img src="images/slide.png" height="520" /></a>
<div class="slide-text">
<p class="slide-text-header">标题2222222222222222222222222222222</p>
<p class="slide-text-content">内容22222222222222222222222222222222222222222222222222222222222222222</p>
</div>
</li>
<li>
<a href="#" target="_blank"><img src="images/slide.png" height="520" />
</a>
<div class="slide-text">
<p class="slide-text-header">标题3333333333333333333333333333</p>
<p class="slide-text-content">内容33333333333333333333333333333333333333333333333333333333333333333</p>
</div></li>
<li>
<a href="#" target="_blank"><img src="images/slide.png" height="520" /></a>
<div class="slide-text">
<p class="slide-text-header">标题4444444444444444444444444444</p>
<p class="slide-text-content">内容44444444444444444444444444444444444444444444444444444444444444444</p>
</div>
</li>
</ul>
</div>
...全文
352 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_15072193 2015-07-17
  • 打赏
  • 举报
回复
每次当图片滚动出容器之后append到父容器,这样第一张就跑到了最后一张,可以无限循环
sydhr_1994 2015-07-17
  • 打赏
  • 举报
回复
可以考虑改成用定位来做, 或者你把这幻灯片的列表做成2份。再弄一份ul放在后面
星耀学园 2015-07-17
  • 打赏
  • 举报
回复
这样根据ul的位置来显示对应的图片 最后到第一张的话 就从最后到0的位置还是反的 有的是动态的添加当前的到列表最后的位置
星耀学园 2015-07-16
  • 打赏
  • 举报
回复
查了半天还是没思路 本来想在最后一张图后面添加第一张图 通过这个添加的图 在下一张就是第二张图的定位了 还没有实现 方向是不是还是反的?
星耀学园 2015-07-16
  • 打赏
  • 举报
回复
引用 3 楼 hch126163 的回复:
$(slid+" ul").stop(true,false).animate({"left":nowLeft},300); nowLeft==0 时 不用动画 var _slid = $(slid+" ul"); _slid.stop(true,false); if(nowLeft==0){_slid.css("left","0px");}else{ _slid.animate({"left":nowLeft},300); }
这样判断的效果 就是最后一张到第一张 没过渡效果直接到第一张图了 能不能加过渡的animate效果 一直向左滑动 最后一张到第一张 也是这样
daswcszxw 2015-07-14
  • 打赏
  • 举报
回复
请了解marquee相关知识.
hch126163 2015-07-14
  • 打赏
  • 举报
回复
$(slid+" ul").stop(true,false).animate({"left":nowLeft},300); nowLeft==0 时 不用动画 var _slid = $(slid+" ul"); _slid.stop(true,false); if(nowLeft==0){_slid.css("left","0px");}else{ _slid.animate({"left":nowLeft},300); }
星耀学园 2015-07-14
  • 打赏
  • 举报
回复
引用 1 楼 webyellow 的回复:
请了解marquee相关知识.
这个貌似不适用的滚动marquee吧

87,883

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧