多屏自动切换jQuery效果,可手动切换

油翁酌油沥钱,自钱孔入而钱不湿。因曰:“我亦无他, 唯手熟尔”。
好久没有好好的写过代码了,博客也有好几个月没有更新。忙于工作,忙于人身大事,忙于琐碎。最近相对清闲,正好一个做后端的朋友求助于我,帮他写一个新蛋网首页多屏自动切换效果。顺便分享之。
多屏自动切换jQuery效果
思路很简单,详见代码。本来是想封装成插件的,但一想,这种效果,也不大可能同时用多个,就偷懒直接写了。相关自定义的变量都放在一起了,一些功能函数也都有注释。自测兼容性良好,若有BUG请反馈。
点此查看样列
jQuery代码:

	var imgField=$('#J_imgList');
	var imgList=$('#J_imgList>li');
	var navField=$('#J_navList');
	var navList=$('#J_navList>li');
	var btnPrev=$('#J_prev');
	var btnNext=$('#J_next');
	var turnPage=4;//每屏显示数
	var T=5000;//切换间隔时间
	var turnT=300;//animate时间
	var N=0;//图片初始索引
	var P=1;//屏初始索引

	var goFun=null;
	var hoverFun=null;
	var triggerFun=null;
	var delayFun=null
	var navListW=navList.outerWidth(true);
	var turnPages=Math.ceil(navList.size()/turnPage);
	//初始图片区域高度与标题区域宽度
	imgField.height(imgList.size()*imgList.height());
	navField.width(navList.size()*navListW);
	//初始自动切换
	GO();
	//自动切换
	function GO() {
		imgField.stop().animate({
			marginTop:-N*(imgList.height())
		},turnT);
		navList.eq(N).addClass('hover').siblings().removeClass('hover');
		if(N%turnPage==0) {
			navField.stop().animate({
				marginLeft:-N*navListW+'px'
			},turnT);
		}
		N++;
		N= N>=imgList.size()?0:N;
		P=Math.ceil(N/turnPage);
		goFun=setTimeout(GO,T);
	}

	//停止切换
	function STOP() {
		clearTimeout(goFun);
	}

	//标题划过移出
	navList.hover( function() {
		clearTimeout(delayFun);
		STOP();
		N=navList.index(this);
		imgField.stop().animate({
			marginTop:-N*(imgList.height())
		},turnT);
		$(this).addClass('hover').siblings().removeClass('hover');
	}, function() {
		N++;
		delayFun=setTimeout(GO,T)
	});
	//图片划过移出
	imgList.hover( function() {
		N=imgList.index(this);
		navList.eq(N).trigger('mouseover');
	}, function() {
		navList.eq(N).trigger('mouseleave');
	});
	//左切换
	btnPrev.click( function() {
		if(P==1) {
			navField.animate({
				marginLeft:-turnPage*navListW*(turnPages-1)+'px'
			},turnT);
			P=turnPages;
		} else {
			STOP();
			P--;
			navField.animate({
				marginLeft:-turnPage*navListW*(P-1)+'px'
			},turnT);
		}
		navList.eq((P-1)*turnPage).trigger('mouseover');
		GO();
	});
	//右切换
	btnNext.click( function() {
		if(P==turnPages) {
			navField.animate({
				marginLeft:0
			},turnT);
			P=1;
		} else {
			STOP();
			P++;
			navField.animate({
				marginLeft:-turnPage*navListW*P+'px'
			});
		}
		navList.eq((P-1)*turnPage).trigger('mouseover');
		GO();
	});
共有 21 条评论.

发表评论1,514 Views

  1. 楼主,是jQ老手的说,呵呵.顺着逍遥博客摸来的,求个友链,呵呵.

    [回复]

  2. 网址收藏了,一定得仔细都看看

    [回复]

  3. 流年依旧

    并且最少切换五个和五个以上

    [回复]

  4. 流年依旧

    假如我这里是一个一个切换怎么做

    [回复]

  5. 网站多出报错,wordpress sql错误 谷歌浏览器

    [回复]

  6. 感谢MR.think为大家提供这一个效果,不过最近发现一个小bug,就是当点左右箭头的时候,发现,如果点两下或是三下,那么,图片的标题就就跟不上了,会出现有两张图片的标题不见的情况

    [回复]

  7. .i_imglist 在ie6 7下总有2px的边距(?padding) 我尝试着都margin padding 0无效后 只能hack下 解决,*margin-top:-2px;_margin-top:-2px; 不知道是否是我上级css影响 还是本身有这兼容问题? 感谢think无私分享 用了好多次你的效果了

    [回复]

    Mr.Think 回复:

    @橘子, 用调试工具排查一下

    [回复]

  8. 我也好长一段时间没写代码了

    [回复]

  9. 一直跟着 你的网站学习,发现了一些小的问题!
    1.图片自动轮转,转到第二页的时候,按next按钮,不动(因为即便是翻到第二页,默认也是在第一页,P没有增加,所以按第一次next,没有变化,实际上是切换到了当前的第二屏,按第二次next,才会跳到第三页!)
    2.图片自动轮转,转到第二页的时候,按prev按钮,直接回到第四屏!问题是相同的,因为自动轮转,屏幕数量 未作更改!

    [回复]

    Meteor 回复:

    @Meteor, 我在GO()里面加了这个,P=Math.ceil(N/turnPage),暂时 没发现异常!

    [回复]

    Mr.Think 回复:

    嗯,感谢提醒。

    [回复]

  10. 先扒下来再说

    [回复]

  11. 切换时太过晃动了

    [回复]

  12. Think终于更新了,时隔好久啊。哈哈~

    [回复]

  13. 精辟的代码,很好的文章

    [回复]

  14. Think大哥重要更新博客了。分享的这个jQuery挺好的,收藏了。
    还有请把友链我的链接从blog.icoa.cn 修改成 http://liboseo.com 吧,我新换了个域名。旧的域名301跳转到了新的,谢谢

    [回复]

    Mr.Think 回复:

    @逍遥博客, 已更新

    [回复]

    逍遥博客 回复:

    @Mr.Think, 谢谢Think大哥,还有希望能多多分享这样的文章

    [回复]

  15. 好东东! 但我在IETEST下测试时IE下竟然全部失效,想用却不敢用。

    [回复]

    Mr.Think 回复:

    @奖杯定做, 按理不会。jQuery一般不会有兼容性问题。用标准IE试一哈。

    [回复]

发表评论[无需注册]