油翁酌油沥钱,自钱孔入而钱不湿。因曰:“我亦无他, 唯手熟尔”。
好久没有好好的写过代码了,博客也有好几个月没有更新。忙于工作,忙于人身大事,忙于琐碎。最近相对清闲,正好一个做后端的朋友求助于我,帮他写一个新蛋网首页多屏自动切换效果。顺便分享之。

思路很简单,详见代码。本来是想封装成插件的,但一想,这种效果,也不大可能同时用多个,就偷懒直接写了。相关自定义的变量都放在一起了,一些功能函数也都有注释。自测兼容性良好,若有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();
});
你好!请教think大一个问题,我这焦点图只在IE下有效,与google.safari等其他浏览器不兼容,改怎么改呢?
标题零
var picarry = {};
var lnkarry = {};
var ttlarry = {};
picarry[0] = “images/01.jpg”;
lnkarry[0] = “#”;
ttlarry[0] = “# 标题1″;
picarry[1] = “images/02.jpg”;
lnkarry[1] = “#”;
ttlarry[1] = “# 标题2″;
picarry[2] = “images/03.jpg”;
lnkarry[2] = “#”;
ttlarry[2] = “# 标题3″;
picarry[3] = “images/04.jpg”;
lnkarry[3] = “#”;
ttlarry[3] = “# 标题4″;
//
var currslid = 0;
var slidint;
function setfoc(id){
document.getElementById(“focpic”).src = picarry[id];
document.getElementById(“foclnk”).href = lnkarry[id];
document.getElementById(“foctitle”).innerHTML = ‘‘+ttlarry[id]+’‘;
currslid = id;
for(i=0;i<4;i++){
document.getElementById("tmb"+i).className = "thumb_off";
};
document.getElementById("tmb"+id).className ="thumb_on";
focpic.style.visibility = "hidden";
focpic.filters[0].Apply();
if (focpic.style.visibility == "visible") {
focpic.style.visibility = "hidden";
focpic.filters.revealTrans.transition=23;
}
else {
focpic.style.visibility = "visible";
focpic.filters[0].transition=23;
}
focpic.filters[0].Play();
stopit();
}
function playnext(){
if(currslid==3){
currslid = 0;
}
else{
currslid++;
};
setfoc(currslid);
playit();
}
function playit(){
slidint = setTimeout(playnext,4500);
}
function stopit(){
clearTimeout(slidint);
}
window.onload = function(){
playit();
}
[回复]
Mr.Think 回复:
二月 28th, 2012 at 22:19
@很拽的番茄, 到蓝色理想发贴咨询~
[回复]
楼主,是jQ老手的说,呵呵.顺着逍遥博客摸来的,求个友链,呵呵.
[回复]
网址收藏了,一定得仔细都看看
[回复]
并且最少切换五个和五个以上
[回复]
假如我这里是一个一个切换怎么做
[回复]
网站多出报错,wordpress sql错误 谷歌浏览器
[回复]
感谢MR.think为大家提供这一个效果,不过最近发现一个小bug,就是当点左右箭头的时候,发现,如果点两下或是三下,那么,图片的标题就就跟不上了,会出现有两张图片的标题不见的情况
[回复]
.i_imglist 在ie6 7下总有2px的边距(?padding) 我尝试着都margin padding 0无效后 只能hack下 解决,*margin-top:-2px;_margin-top:-2px; 不知道是否是我上级css影响 还是本身有这兼容问题? 感谢think无私分享 用了好多次你的效果了
[回复]
Mr.Think 回复:
十二月 16th, 2011 at 09:49
@橘子, 用调试工具排查一下
[回复]
我也好长一段时间没写代码了
[回复]
一直跟着 你的网站学习,发现了一些小的问题!
1.图片自动轮转,转到第二页的时候,按next按钮,不动(因为即便是翻到第二页,默认也是在第一页,P没有增加,所以按第一次next,没有变化,实际上是切换到了当前的第二屏,按第二次next,才会跳到第三页!)
2.图片自动轮转,转到第二页的时候,按prev按钮,直接回到第四屏!问题是相同的,因为自动轮转,屏幕数量 未作更改!
[回复]
Meteor 回复:
十一月 23rd, 2011 at 11:31
@Meteor, 我在GO()里面加了这个,P=Math.ceil(N/turnPage),暂时 没发现异常!
[回复]
Mr.Think 回复:
十一月 27th, 2011 at 18:59
嗯,感谢提醒。
[回复]
先扒下来再说
[回复]
切换时太过晃动了
[回复]
Think终于更新了,时隔好久啊。哈哈~
[回复]
精辟的代码,很好的文章
[回复]
Think大哥重要更新博客了。分享的这个jQuery挺好的,收藏了。
还有请把友链我的链接从blog.icoa.cn 修改成 http://liboseo.com 吧,我新换了个域名。旧的域名301跳转到了新的,谢谢
[回复]
Mr.Think 回复:
十一月 10th, 2011 at 22:41
@逍遥博客, 已更新
[回复]
逍遥博客 回复:
十一月 14th, 2011 at 10:11
@Mr.Think, 谢谢Think大哥,还有希望能多多分享这样的文章
[回复]
好东东! 但我在IETEST下测试时IE下竟然全部失效,想用却不敢用。
[回复]
Mr.Think 回复:
十一月 5th, 2011 at 22:31
@奖杯定做, 按理不会。jQuery一般不会有兼容性问题。用标准IE试一哈。
[回复]