此插件是对10年8月20日的文章的更新, 之前的版本有诸多bug…抱着对读者负责的态度,又重写了一次.
更新内容:
1. 用户快速划过按钮时不触发鼠标事件;
2. 鼠标划入当前图片按钮时不闪烁;
3. 简化并优化代码.
使用方法就不详述了, 请参见源码及相关注释:点此查看DEMO
$.fn.iFadeSlide = function(iSet){
/*
* iSet可选参数说明:
* iSet.field==>幻灯区域内的图片集
* iSet.ico==>按钮钩子
* iSet.high==>按钮高亮样式
* iSet.interval==>图片切换时间
* iSet.leaveTime==>不触发鼠标划入事件的最大时间值
* iSet.fadeInTime==>淡入时间
* iSet.fadeOutTime==>淡出时间
* 调用方式$(document).iFadeSlide({field:'...',ico:'...',...})
*/
iSet = $.extend({high:'high',interval:3000,leaveTime:150,fadeOutTime:400,fadeInTime:400},iSet);
var imgField = $(iSet.field || '#slide>img');
var icoField = $(iSet.ico || '#ico');
var curIndex = 0;
var slideInterval = iSet.interval || 3000;
var hoverTime = iSet.leaveTime || 150;
var fadeOutTime = iSet.fadeOutTime || 400;
var fadeInTime = iSet.fadeInTime || 400;
var icos=null, fastHoverFun = null, autoSlideFun = null, hasIcoHighCls = null, changeFun = null,max=null;;
var icoHtml = '<ul>';
max=imgField.size();
//按图片传入对应的按钮
imgField.each(function(i){
icoHtml += '<li>' + (i + 1) + '</li>';
});
icoHtml += '</ul>';
icoField.append(icoHtml);
//淡入淡出函数
changeFun = function(n){
imgField.filter(':visible').fadeOut(fadeOutTime, function(){
imgField.eq(n).fadeIn(fadeInTime)
icos.eq(n).addClass(iSet.high).siblings().removeClass(iSet.high);
});
}
icos = icoField.find('ul>li');
//为第一个按键初始化高亮
icos.first().addClass(iSet.high);
//按钮鼠标划入划出事件
icos.hover(function(){
clearInterval(autoSlideFun);
curIndex = icos.index(this);
hasIcoHighName = $(this).hasClass(iSet.high);
//setTimeout避免用户快速(无意识性划过)划过时触发事件
fastHoverFun = setTimeout(function(){
//鼠标划入当前图片按钮时不闪烁
if (!hasIcoHighName) {
changeFun(curIndex);
}
}, hoverTime);
}, function(){
clearTimeout(fastHoverFun);
//自动切换
autoSlideFun = setInterval(function(){
curIndex++;
changeFun(curIndex);
if (curIndex ==max ) {
changeFun(0);
curIndex = 0;
}
}, slideInterval)
}).eq(0).trigger('mouseleave');
//当鼠标划入图片区域时停止切换
imgField.hover(function(){
curIndex = imgField.index(this);
clearInterval(autoSlideFun);
}, function(){
icos.eq(curIndex).trigger('mouseleave');
});
}
我是js初学者 就只有两张图片 不想让其自动切换 单击按钮淡入淡出 这样需要怎么做?如果可以 可以放到我邮箱中吗?谢谢了!743463518@qq.com
[回复]
请问如何实现随机显示第一第出现的图?
[回复]
Mr.Think 回复:
四月 12th, 2012 at 12:36
@Aaron, 可给插件中的变量curIndex赋一个随机值。
[回复]
插件在CHROME下面有问题不会切换的。
[回复]
Mr.Think 回复:
三月 13th, 2012 at 11:42
@kiter, 一直用的是chrome,没发现此bug
[回复]
请问是不是不可以帮图片加上链接呢?
似乎只要加上的语法,该张图片就会读取不到,然后图片就不会变换了~
感觉因为加上的语法后,变成单纯入了一张图片那样,特效完全看不出来…
这个问题请问有办法改善吗?谢谢
[回复]
Mr.Think 回复:
二月 28th, 2012 at 22:17
@Liz, 当然可以加图片,查查图片获取变量,插件中用的是#slide>img 改成#slide img或#slide>a>img试试…
[回复]
2011.01.11更新这个版本图片对应的小icon有奇怪的滞后,要比对应的图片晚一点出现,请问这个能改么?另外,我也觉得没有白背景出现最好,请教怎么改代码让图片叠在一起,也就是前一个淡出的同时后一个淡入?谢谢!
[回复]
Mr.Think 回复:
二月 28th, 2012 at 22:18
@wereeagle, 不太明白你的意图。
[回复]
@外闻网,
[回复]
为什么这个切换的时候是白色底色跟图片切换
有点失望,有损美观,楼主为什么不做成第一张图片快完进,第二张图片出来切换,这样白色就消失了哈
[回复]
Mr.Think 回复:
六月 29th, 2011 at 16:53
@蜗牛漫步, 欢迎改进:)
[回复]
用来用去 还是你的focus 省心 ^_^
[回复]
好像在谷歌浏览器看不出效果!
[回复]
Mr.Think 回复:
五月 10th, 2011 at 16:30
@lynn, 我常用浏览器即是Chrome…
[回复]
非常感谢,切换时会有白色背景飘过,还有就是如何实现按钮背景的圆角化,CSS3简单实现,但IE不支持,能有什么好办法吗?
[回复]
Mr.Think 回复:
五月 3rd, 2011 at 09:52
@lulyin, 切换当然会有白色背景飘过,那是淡入淡出~ 圆角参考:http://mrthink.net/css-common-round-triangle/
[回复]
您好。这个插件很好用,就是如果图片只有一张的时候会一直闪烁。。。因为刚学JS所以想讨教下原因。谢谢了。
[回复]
Mr.Think 回复:
四月 28th, 2011 at 11:00
@海狸, 加个变量,保存图片个数,当小于2时,return false. 加外,你只有一张图片,为什么还要弄个切换效果呢
[回复]
不错,求友链
不知可否~
[回复]
Mr.Think 回复:
三月 29th, 2011 at 13:08
@SEO工程师, OK,已加~
[回复]
可以把数字的ICO 用图片标题(文字)替代么?例如 ico:’1.xxxx;2.xxx,3.xxx’ 这类的
[回复]
Mr.Think 回复:
三月 17th, 2011 at 12:17
@weber, 这个我也不知道。
[回复]
看了学习了,站长真认真,向你学习
[回复]
我又来啦 新年快乐哈
[回复]
Mr.Think 回复:
二月 14th, 2011 at 20:05
@橘子, 新年快乐~ :)
[回复]
橘子 回复:
二月 16th, 2011 at 20:40
@Mr.Think, 很郁闷 插件和别的js冲突了…若放入document.ready内则
$.fn is undefined
[在此错误处中断] $.fn.iFadeSlide = function(iSet){
不放入直接调用则
提示$(document)null了..目前还在检查原因 可能和后加的js发生了冲突
[回复]
橘子 回复:
二月 17th, 2011 at 09:53
@橘子, 我错了 我真的错了我居然没注意到$冲突 我真笨. 明明firebug已经提示提示$(document)null了 o(︶︿︶)o 唉
请问代码在哪里下载,谢谢
[回复]
Mr.Think 回复:
二月 14th, 2011 at 20:06
@happy, 晕,怎么老有人问这种问题啊…在 样例演示页面 查看页面源代码 复制粘贴
[回复]
网页幻灯这个代码可以的~~
[回复]
有个小BUG,在FIREFOX
[回复]
Mr.Think 回复:
一月 11th, 2011 at 18:45
@paskaa, 一会儿会重新写个,哈
[回复]
额 个人意见 觉得思路搞复杂了 用mouseleave触发自动轮换 感觉耦合太高了 扩展不易 因此 很突出的一个用户体验就是 从右下角的标签移动到图片或者从对应图片移动到对应标签 还是会触发 fade函数 所以感觉 设置状态值就很别扭了 毕竟你的fade是与mouseleave基本绑定
当时想了z-index 但是没有试过 呵呵 个人意见…..
[回复]
Mr.Think 回复:
十二月 22nd, 2010 at 08:13
@游客, 非常感谢你的意见. 本插件的确存在一些问题,比如快速划过切换索引时也会触发. 因时间原因,一直没有修正问题, 月底前一定抽空重写一次.
[回复]
非常方便的幻灯插件,感谢Mr.Think
[回复]
感觉很复杂呀,之前看过js的好像代码还是比较少的
[回复]
Mr.Think 回复:
八月 27th, 2010 at 14:02
@web前端寒风, 欢迎提供比本文实现方法更简单的思路.
[回复]
交流一下,看Demo里图片淡入淡出不是很自然,白色背景飘过,我也有写这样的一个插件,关键在于图片要用绝对定位重叠在一起,这样在切换时会很自然
[回复]
Mr.Think 回复:
八月 26th, 2010 at 15:49
@ToFishes, 你尝试改一下切换时间 ,效果会好一些. 我试了下绝对定位图片,MS没什么变化.
[回复]
wereeagle 回复:
十一月 9th, 2011 at 04:04
@ToFishes, @Mr.Think, 我也觉得没有白背景出现最好,请教怎么改代码让图片叠在一起,也就是前一个淡出的同时后一个淡入?谢谢!
[回复]
chinaz 回复:
一月 17th, 2012 at 15:56
@wereeagle, 请问老兄 具体要怎么改可以达到这个效果
[回复]
我觉得最好是延迟零点几秒再执行,现在把鼠标从1顺序移到5的话,那个用户体验是很差的。
[回复]
Mr.Think 回复:
八月 24th, 2010 at 15:20
@ZeroZ, 呵呵. 个人觉得延迟有些不妥,有慢半拍的感觉.你可以试试为切换加一个delay(300)看效果.欢迎扩展~
[回复]
ZeroZ 回复:
八月 25th, 2010 at 11:30
@Mr.Think, 我的意思是让用户在无意识的鼠标移动中,不会出发切换事件。当用户并没有想切换,只是想把鼠标移动到别的地方的时候,不小心经过了触发事件的按钮,这个时候是不是不应该切换呢?这个时间是很短的,只需要延迟很短一个时间。我知道目前市面上的这种幻灯插件很少有延迟的效果,我看到的似乎只有淘宝首页的幻灯有这个功能,但我觉得这不失为是一个比较好的用户体验。
ps:我觉得你有必要装一个邮件回复的插件了,比如Mail To Commenter这个。
[回复]
Mr.Think 回复:
八月 25th, 2010 at 14:39
@ZeroZ, 非常感谢你的意见.这的确是个值得研究的观点.晚上我会好好研究一下.另,感谢推荐的评论插件.改天会尝试安装一下.
ZeroZ 回复:
八月 25th, 2010 at 11:31
@Mr.Think, 刚才留言打错字了,“出发”改为“触发”,太丢人了。
[回复]
每日一访。。。
[回复]