jQuery实现首页图片淡入淡出效果的方法

本文实例讲述了jQuery实现首页图片淡入淡出效果的方法。分享给大家供大家参考。具体分析如下:

这里演示当当网的品牌店铺首页效果,演示地址为:http://static.dangdang.com/gm/topic/2270_181320.shtml

效果图如下所示:

需求:

1. 绿色区域要求在图片上方,半透明显示

2. 当鼠标移动到红色区域,切换相应的图片

3. 首页的三张大图轮转

HTML:

<div id="carousel">
 <div id="carouselimg" class="content_top">
  <div id="imgcontainer" class="slide_panel">
   <a target="_blank" href="http://www.baidu.com" mce_href="http://www.baidu.com"><img src="images/brandshop/band_lx_717x280.gif" mce_src="images/brandshop/band_lx_717x280.gif"/></a>
   <a target="_blank" href="http://www.google.com" mce_href="http://www.google.com"><img src="images/brandshop/band_agz_717x280.gif" mce_src="images/brandshop/band_agz_717x280.gif"/></a>
   <a target="_blank" href="http://www.dangdang.com" mce_href="http://www.dangdang.com"><img src="images/brandshop/band_qb_717x280.gif" mce_src="images/brandshop/band_qb_717x280.gif"/></a>
  </div>
</div>
<div id="carouseltitle">
  <ul>
   <li>
    <a href="#" mce_href="#">联想 <span>lenovo</span></a>
   </li>
   <li>
    <a href="#" mce_href="#">爱国者 <span>aigo</span></a>
   </li>
   <li>
    <a href="#" mce_href="#">倩碧 <span>CLINIQUE</span></a>
   </li>
  </ul>
</div>

CSS:

<mce:style type="text/css"><!--
 *{
  padding:0;
  margin:0;
 }
 #carousel{
  border-color:#DFDFDF;border-style:solid;border-width:0 1px 1px;
  position:relative;/*DO NOT delete this line*/
 }
 #carousel ul{
  list-style:none;
 }
 #carousel #carouselimg{
  position:relative;/*fix ie7 overflow bug*/
  overflow:hidden;
 }
 #carousel #carouselimg #imgcontainer{
  position:absolute;
  left:0px;
  top:0px;
 }
 #carousel #carouselimg img{
  float:left;/*fix ie6 auto-margin bug*/
  border:0;
  /*display:none;*/
 }
 #carousel #carouseltitle{
  position:absolute;
  bottom:0px;
 }
 #carousel #carouseltitle ul{
 }
 #carousel #carouseltitle li{
  width:239px;
  height:30px;
  line-height:30px;
  font-size:14px;
  text-align:center;
  background:#000;
  color:#FFF;
  float:left;
  cursor:pointer;
  opacity:.6;
  filter:alpha(opacity=60);
 }
 #carousel #carouseltitle .active{
  background:#cfaf73;
  color:#FFF;
  opacity:.9;
  filter:alpha(opacity=90);
 }
 #carousel #carouseltitle .active a{
  color:#000;
 }
 #carousel #carouseltitle li a{
   text-decoration:none;
   color:#fff;
 }
 #carousel #carouseltitle li a span{
  font-family:Arial;
 }
--></mce:style><style type="text/css" mce_bogus="1"> *{
  padding:0;
  margin:0;
 }
 #carousel{
  border-color:#DFDFDF;border-style:solid;border-width:0 1px 1px;
  position:relative;/*DO NOT delete this line*/
 }
 #carousel ul{
  list-style:none;
 }
 #carousel #carouselimg{
  position:relative;/*fix ie7 overflow bug*/
  overflow:hidden;
 }
 #carousel #carouselimg #imgcontainer{
  position:absolute;
  left:0px;
  top:0px;
 }
 #carousel #carouselimg img{
  float:left;/*fix ie6 auto-margin bug*/
  border:0;
  /*display:none;*/
 }
 #carousel #carouseltitle{
  position:absolute;
  bottom:0px;
 }
 #carousel #carouseltitle ul{
 }
 #carousel #carouseltitle li{
  width:239px;
  height:30px;
  line-height:30px;
  font-size:14px;
  text-align:center;
  background:#000;
  color:#FFF;
  float:left;
  cursor:pointer;
  opacity:.6;
  filter:alpha(opacity=60);
 }
 #carousel #carouseltitle .active{
  background:#cfaf73;
  color:#FFF;
  opacity:.9;
  filter:alpha(opacity=90);
 }
 #carousel #carouseltitle .active a{
  color:#000;
 }
 #carousel #carouseltitle li a{
   text-decoration:none;
   color:#fff;
 }
 #carousel #carouseltitle li a span{
  font-family:Arial;
 }
</style>

引入River Zhang 的fr.carousel.js

FR={
 Version:'1.0.0',
 Author:'River Zhang(zhang_hechuan@hotmail.com)',
 Lisence:'MIT Lisence'
};
FR.Util={
 //Replace document.getElementById.
 $:function(id){
 return document.getElementById(id);
 },
 //Replace getElementsByTagName.
 $$:function(node, tag){
 return node.getElementsByTagName(tag);
 },
 creat:function(node,name){
 var element=document.createElement(name);
 node.appendChild(element);
 return element;
 },
 //Event Binding functions.
 addEvent:function(eventType,eventFunc,eventObj){
 eventObj = eventObj || document;
 if(window.attachEvent)eventObj.attachEvent("on"+eventType,eventFunc);
 if(window.addEventListener) eventObj.addEventListener(eventType,eventFunc,false);
 },
 setOpacity:function(obj, value) {
 if (document.all) obj.style.filter = "alpha(opacity=" + value + ")";
 else obj.style.opacity = value / 100;
 },
 setPosition:function(obj, x, y){
 var curx=parseInt(obj.style.left);
 var cury=parseInt(obj.style.top);
 if(isNaN(curx)) curx=cury=0;
 var newx=curx+x;
 var newy=cury+y;
 obj.style.left=newx+'px';
 obj.style.top=newy+'px';
 }
};
FR.Carousel={
 version:'1.1',
 mode:1,
 steps:20,
 period:25,
 width:300,
 height:200,
 bgColor:'#000000',
 autoSwitch:true,
 delay:5000,
 _semaphore:0,/* DO NOT try to modify this value */
 start:function(args){
 if(typeof(args)!='undefined'){
  FR.Carousel.mode=args.mode||FR.Carousel.mode;
  FR.Carousel.steps=args.steps||FR.Carousel.steps;
  FR.Carousel.period=args.period||FR.Carousel.period;
  FR.Carousel.width=args.width||FR.Carousel.width;
  FR.Carousel.height=args.height||FR.Carousel.height;
  FR.Carousel.bgColor=args.bgColor||FR.Carousel.bgColor;
  FR.Carousel.autoSwitch=args.autoSwitch||FR.Carousel.autoSwitch;
  FR.Carousel.delay=args.delay||FR.Carousel.delay;
 }
 FR.Util.addEvent("load",FR.Carousel.run,window);
 },
 run:function(){
 FR.Carousel.initialCSS();
 FR.Carousel.counter='frimg0';
 var carouselimg=FR.Util.$('carouselimg');
 var img=FR.Util.$$(carouselimg, 'img');
 for(var i=0;i!=img.length;++i){
  img[i].id='frimg'+i;
  if(FR.Carousel.mode==4 || FR.Carousel.mode==5) continue;
  img[i].style.position="absolute";
  img[i].style.left="0 px";
  img[i].style.top="0 px";
  FR.Util.setOpacity(img[i], 0);
 }
 if(FR.Carousel.mode!=4) FR.Util.setOpacity(img[0], 100);
 if(FR.Carousel.mode==1) bindFunction=function(name){FR.Carousel.fade(FR.Util.$(name), FR.Carousel.steps, FR.Carousel.period);};
 else if(FR.Carousel.mode==2) bindFunction=function(name){FR.Carousel.flash(FR.Util.$(name), FR.Carousel.steps, FR.Carousel.period);};
 else if(FR.Carousel.mode==3) bindFunction=function(name){FR.Carousel.fadeIntoColor(FR.Util.$(name), FR.Carousel.steps, FR.Carousel.period);};
 else if(FR.Carousel.mode==4) bindFunction=function(name){FR.Carousel.scroll(name, FR.Carousel.steps, FR.Carousel.period);};
 else if(FR.Carousel.mode==5) bindFunction=function(name){FR.Carousel.crawl(name, FR.Carousel.steps, FR.Carousel.period);};
 var carouseltitle=FR.Util.$('carouseltitle');
 var li=FR.Util.$$(carouseltitle, 'li');
 li[0].className='#carousel #carouseltitle active';
 FR.Carousel.autoCarousel(img.length);
 for(var i=0;i!=li.length;++i){
  (function(){
  var name='frimg'+i;
  li[i].onmouseover=function(){
   clearInterval(FR.Carousel.s);
   if(!FR.Carousel._semaphore){
   li[FR.Carousel.counter.split('')[FR.Carousel.counter.length-1]].className='';
   this.className='#carousel #carouseltitle active';
   bindFunction(name);
   }
  };
  li[i].onmouseout=function(){
   FR.Carousel.autoCarousel(img.length);
  }
  })();
 }
 },
 autoCarousel:function(length){
 if(FR.Carousel.autoSwitch){
  FR.Carousel.s=setInterval(function(){
  var carouseltitle=FR.Util.$('carouseltitle');
  var li=FR.Util.$$(carouseltitle, 'li');
  li[FR.Carousel.counter.split('')[FR.Carousel.counter.length-1]].className='';
  var next=(parseInt(FR.Carousel.counter.split('')[FR.Carousel.counter.length-1])+1)%length;
  li[next].className='#carousel #carouseltitle active';
  name='frimg'+next;
  bindFunction(name);
  },FR.Carousel.delay);
 }
 },
 initialCSS:function(){
 var carouselimg=FR.Util.$('carouselimg');
 var carousel=FR.Util.$('carousel');
 carouselimg.style.width=FR.Carousel.width+"px";
 carouselimg.style.height=FR.Carousel.height+"px";
 carousel.style.width=FR.Carousel.width+"px";
 carousel.style.height=FR.Carousel.height+"px";
 if(FR.Carousel.mode==5){
  var imgcontainer=FR.Util.$('imgcontainer');
  var img=FR.Util.$$(carouselimg, 'img');
  var size=img.length*FR.Carousel.width;
  imgcontainer.style.width=size+"px";
 }
 },
 fade:function(obj, steps, speed) {
 FR.Carousel._semaphore=1;
 var value1=0;
 var value2=100;
 if(obj.id!=FR.Carousel.counter){
  var carouselimg=FR.Util.$('carouselimg');
  var img=FR.Util.$$(carouselimg, 'img');
  for(var i=0;i!=img.length;++i){
  if(i!=FR.Carousel.counter.split('')[FR.Carousel.counter.length-1])
  FR.Util.setOpacity(img[i], 0);
  }
  temp=FR.Carousel.counter;
  FR.Carousel.counter=obj.id;
  tempobj=FR.Util.$(temp);
  var increment=100/steps;
  FR.Carousel.i=setInterval(function(){
  if(value1<=100){
   FR.Util.setOpacity(obj,value1);
   FR.Util.setOpacity(tempobj,value2);
   value1+=increment;
   value2-=increment;
  } else {
   clearInterval(FR.Carousel.i);
   FR.Carousel._semaphore=0;
  }
  },speed);
 }else {
  FR.Carousel._semaphore=0;
  return;
 }
 },
 flash:function(obj, steps, speed) {
 FR.Carousel._semaphore=1;
 var value1=0;
 if(obj.id!=FR.Carousel.counter){
  var carouselimg=FR.Util.$('carouselimg');
  var img=FR.Util.$$(carouselimg, 'img');
  for(var i=0;i!=img.length;++i){
  FR.Util.setOpacity(img[i], 0);
  }
  FR.Carousel.counter=obj.id;
  var increment=100/steps;
  FR.Carousel.i=setInterval(function(){
  if(value1<=100){
   FR.Util.setOpacity(obj,value1);
   value1+=increment;
  } else {
   clearInterval(FR.Carousel.i);
   FR.Carousel._semaphore=0;
  }
  },speed);
 }else {
  FR.Carousel._semaphore=0;
  return;
 }
 },
 fadeIntoColor:function(obj, steps, speed){
 FR.Carousel._semaphore=1;
 var value1=100;
 var value2=0;
 if(obj.id!=FR.Carousel.counter){
  var carouselimg=FR.Util.$('carouselimg');
  carouselimg.style.backgroundColor=FR.Carousel.bgColor;
  var img=FR.Util.$$(carouselimg, 'img');
  for(var i=0;i!=img.length;++i){
  if(i!=FR.Carousel.counter.split('')[FR.Carousel.counter.length-1])
  FR.Util.setOpacity(img[i], 0);
  }
  temp=FR.Carousel.counter;
  FR.Carousel.counter=obj.id;
  tempobj=FR.Util.$(temp);
  var increment=100/steps;
  FR.Carousel.i=setInterval(function(){
  if(value1>=0){
   FR.Util.setOpacity(tempobj,value1);
   value1-=increment;
  }
  else if(value1<0 && value2<=100){
   FR.Util.setOpacity(obj,value2);
   value2+=increment;
  } else {
   clearInterval(FR.Carousel.i);
   FR.Carousel._semaphore=0;
  }
  },speed);
 } else {
  FR.Carousel._semaphore=0;
  return;
 }
 },
 scroll:function(curno, steps, speed){
 FR.Carousel._semaphore=1;
 var ic=FR.Util.$('imgcontainer');
 var count=(curno.split('')[curno.length-1]-FR.Carousel.counter.split('')[FR.Carousel.counter.length-1])*FR.Carousel.height;
 FR.Carousel.counter=curno;
 var value1=0;
 var increment=count/steps;
 FR.Carousel.i=setInterval(function(){
  if(Math.abs(value1)<Math.abs(count)){
  if(count>0){
   FR.Util.setPosition(ic,0,-increment);
   value1-=increment;
  }
  else{
   FR.Util.setPosition(ic,0,-increment);
   value1+=increment;
  }
  } else {
  clearInterval(FR.Carousel.i);
  FR.Carousel._semaphore=0;
  }
 },speed);
 },
 crawl:function(curno, steps, speed){
 FR.Carousel._semaphore=1;
 var ic=FR.Util.$('imgcontainer');
 var count=(curno.split('')[curno.length-1]-FR.Carousel.counter.split('')[FR.Carousel.counter.length-1])*FR.Carousel.width;
 FR.Carousel.counter=curno;
 var value1=0;
 var increment=count/steps;
 FR.Carousel.i=setInterval(function(){
  if(Math.abs(value1)<Math.abs(count)){
  if(count>0){
   FR.Util.setPosition(ic,-increment,0);
   value1-=increment;
  }
  else{
   FR.Util.setPosition(ic,-increment,0);
   value1+=increment;
  }
  } else {
  clearInterval(FR.Carousel.i);
  FR.Carousel._semaphore=0;
  }
 },speed);
 }
};

可以实现图片的轮转效果,但是点击图片后,每次链接跳转都是最后一张图的a href

查看fr.carousel.js ,原来,它实现的思路是将三张图一张叠在一张上边,使用setInterval() ,将一张图的opacity 值置为1,其余两张为0。但是,这将导致你点击图片后,每次的链接都是最上边的那张图(即最后倩碧那一张)。

解决方法:

设置轮转图的 z-index,当图片显示的时候,其父节点<a> 的z-index 比其它元素高。

jQuery实现:

// 判断img轮转,实现a跳转
setInterval(function(){
 $("#imgcontainer a").each(function(i){
  var img = $(this).children("img");
  var op = img.css("opacity");
  if(op>0){
   img.css("z-index","100");
   $(this).css("z-index","100");
  }else{
   img.css("z-index","0");
   $(this).css("z-index","0");
  }
 })
},100);

希望本文所述对大家的jQuery程序设计有所帮助。

(0)

相关推荐

  • 原生js和jQuery实现淡入淡出轮播效果

    本文实例为大家介绍了基于jQuery实现淡入淡出轮播效果的关键代码,分享给大家供大家参考,具体内容如下: 基本原理:将所有图片绝对定位在同一位置,透明度设为0,然后通过jQuery的淡入淡出实现图片的切换效果. html代码: <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>一个轮播&l

  • jquery实现通用版鼠标经过淡入淡出效果

    复制代码 代码如下: <a class="jq_btn" href="#"><div></div></a> //鼠标移上去效果 $(".jq_btn").hover(function(){ $(this).find("div").stop().fadeIn(); },function(){ $(this).find("div").stop().fadeOut(

  • jquery实现经典的淡入淡出选项卡效果代码

    本文实例讲述了jquery实现经典的淡入淡出选项卡效果代码.分享给大家供大家参考.具体如下: 这是一款经典的Tab选项卡代码,带有淡入淡出效果,jquery插件实现,希望大家能够喜欢,界面未做美化.感兴趣的朋友可以优化一下 运行效果截图如下: 在线演示地址如下: http://demo.jb51.net/js/2015/jquery-jd-fade-in-out-style-tab-codes/ 具体代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTM

  • jQuery实现图片文字淡入淡出效果

    本实例主要讲解了jquery仿新浪微博图片文字列表上下淡进淡出间歇上下滚动效果,分享给大家供大家参考,具体内容如下 1.效果及功能说明 仿新浪微博图片文字列表上下淡进淡出间歇上下滚动 2.实现原理 首先要设定div内只能显示4个图片那么多出来的图片会自动隐藏然后在给图片添加一个动画的事件让他们可以滚动的播放出来上下滚动效果播放就是li标签里面的内容图片和文字把每一个li看成一个整体在滚动播放的时候进入div内的显示出来在最后离开div的时候隐藏在给整个动画效果设定一个时间就可以完整的运行. 3.

  • 原生js和jquery实现图片轮播淡入淡出效果

    图片轮播有很多种方式,这里采用其中的 淡入淡出形式 js原生和jQuery都可以实现,jquery因为封装了很多用法,所以用起来就简单许多,转换成js使用,其实也就是用js原生模拟出这些用法. 但不管怎样,构造一个最基本的表现层是必须的 简单的图片轮播一般由几个部分构成. 对于淡入淡出式 1.首先是个外围部分(其实也就是最外边的整体wrapper) 2.接着就是你设置图片轮播的地方(也就是一个banner吧) 3.然后是一个图片组(可以用新的div 也可以直接使用 ul-->li形式) 4.然后

  • jquery 淡入淡出效果的简单实现

    样式: 复制代码 代码如下: <style type="text/css">      #win {              width: 98%;             position: absolute;                  display: none;          float:left;          } /*控制关闭按钮的位置*/        #close {         margin-left: 155px;         c

  • jQuery实现点击小图片淡入淡出显示大图片特效

    分享一款基于jQuery点击淡入淡出显示图片特效.这是一款基于jQuery+CSS3实现酷炫效果的图片切换特效代码.效果图如下: 在线预览    源码下载 html代码: <center><p style="color:#334960">点击图标进行展示</p></center> <div class="main"> <div id="coolShow"></div&g

  • jQuery实现DIV层淡入淡出拖动特效的方法

    本文实例讲述了jQuery实现DIV层淡入淡出拖动特效的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: <html> <head> <title>jQuery实现DIV层淡入淡出的拖动效果)</title> <style type="text/css"> #div2 {     position:absolute;     width:400px;     height:300px;     border

  • jquery实现的淡入淡出下拉菜单效果

    本文实例讲述了jquery实现的淡入淡出下拉菜单效果.分享给大家供大家参考.具体如下: 这是一款jQuery带有淡入淡出效果的下拉菜单,可作为一个下拉导航菜单的模板,移动鼠标到一级主菜单上看一看,在有包括二级子菜单的菜单项上悬停时,二级菜单渐变显示出来,兼容性也是很不错的,希望大家喜欢哈. 运行效果截图如下: 在线演示地址如下: http://demo.jb51.net/js/2015/jquery-fade-in-out-menu-style-codes/ 具体代码如下: <!DOCTYPE

  • jquery淡入淡出效果简单实例

    本文实例讲述了jquery淡入淡出效果实现方法.分享给大家供大家参考,具体如下: 之前理解有一些误区,以为淡入淡出是删除该元素,其实只是把该元素隐藏起来 和 显示出来罢了. 具体代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xml

  • jquery实现带渐变淡入淡出并向右依次展开的多级菜单效果实例

    本文实例讲述了jquery实现带渐变淡入淡出并向右依次展开的多级菜单效果.分享给大家供大家参考.具体如下: 这是一款核心基于jquery的多级导航菜单特效,横向向右依次展开菜单项,当然本菜单并不是完美的,因此没有怎么美化,另外包括子菜单的上级菜单中缺少一个菜单标记,这样用户有时候不知道哪个菜单中含有下级子菜单.不过添加这样一个标记似乎挺简单,你可以自己动手添加吧. 运行效果截图如下: 在线演示地址如下: http://demo.jb51.net/js/2015/jquery-right-show

  • jQuery实现的淡入淡出二级菜单效果代码

    本文实例讲述了jQuery实现的淡入淡出二级菜单效果代码.分享给大家供大家参考.具体如下: 这是一款加入了jQuery的菜单,一个看似平凡菜单突然有味道.有生机起来,这里将jQuery1.3.2引用进来,让弹出的二级菜单具备淡入淡出的效果,虽然就效果本身来说并不起眼,但比起无任何效果的菜单,从体验上来说,已经强了很多倍. 运行效果截图如下: 在线演示地址如下: http://demo.jb51.net/js/2015/jquery-fade-in-out-2l-nav-menu-codes/ 具

随机推荐