当前位置:小小软件库 > 代码/教程 > 正文

CSS+JS控制遮罩效果的TAB及焦点图片切换(荐)

小小哟 发布:2020-10-06 812


  

CSS+JS控制遮罩效果的TAB及焦点图片切换(荐)  第1张

  CSS+Js图片切换技术,类似的已有不少了,这一个使用了遮罩过渡的效果,同样应用到了TAB选项卡上,本页面仅是为了演示,大家用时候把它拆分开来,这个效果也对学习图片效果制作很有帮助。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>CSS+JS控制遮罩效果的TAB及焦点图片切换(荐) </title>
<style>
div, ul, ol, li, dl, dt, dd {
margin:0;
padding:0;
}
.imgFlash,.tab{margin:auto}
/*------焦点图片的css-------*/
.imgFlash {
height:230px;width:270px;
position:relative;
}
.imgFlash dl {
    height:100%;
    overflow:hidden;
    position:absolute;
    width:100%;
}
.imgFlash img {
    height:100%;
    position:absolute;
    width:100%;
    background-color: #FFFFFF;
    background-repeat: no-repeat;
    background-position: center center;
}
.imgFlash dt {
bottom:0;
font-size:12px;
height:24px;line-height:24px;
left:0;
position:absolute;
width:100%;
z-index:1;
}
.imgFlash dt span {
    background-color:#000000;
    height:100%;
    opacity:0.4;filter:Alpha(Opacity=40);
    position:absolute;
    width:100%;
}
.imgFlash dt a {
color:#FFFFFF;
position:absolute;
text-decoration:none;
text-indent:5px;
z-index:1;
}
.imgFlash dt a:hover {
text-decoration:underline;
}
.imgFlash div {
bottom:8px;
cursor:pointer;
display:block;
position:absolute;
right:8px;
z-index:99999;
}
.imgFlash div em {
background-color:#000000;
border:1px solid #FFFFFF;
display:block;
float:right;
height:4px;
margin-right:3px;
filter:Alpha(Opacity=50);opacity:0.5;
overflow:hidden;
width:4px;
}
.imgFlash div em.d {/*激活的小方块的样式*/
background-color:#CC0000;
filter:Alpha(Opacity=80);
opacity:0.8;
}
/*-------------------------Tab的css----------------------------*/
.tab,.tab ul{list-style-type: none;}
.tab{
    width:270px;
    background-color:#FFFFFF;
    height: 160px;
    font-size: 12px;
    position: relative;
    border-top-width: 30px;
    border-right-width: 1px;
    border-bottom-width: 1px;
    border-left-width: 1px;
    border-top-style: solid;
    border-right-style: solid;
    border-bottom-style: solid;
    border-left-style: solid;
    border-top-color: #0066FF;
    border-right-color: #0066FF;
    border-bottom-color: #0066FF;
    border-left-color: #0066FF;
}
.tab ul {
    position: absolute;
    top: -30px;
}
.tab li{
    float:left;
    background-color:#A9CEEB;
    background-repeat:no-repeat;
    background-position:left top;
    margin-top:5px;
    margin-left: 5px;
}
.tab li.d {
    background-color: #FFFFFF;
}
.tab li a{text-decoration:none;display:block;padding-right:8px;padding-left:8px;line-height:25px;color:#2B6FA2;}
.tab li.d a{color:#0C3E74;}
.tab li ul{
    border-bottom-style:none;
    position:absolute;
    left:0px;
    top:30px;
    background-color: #FFFFFF;
    padding-top: 10px;
    width: 270px;
}
.tab li li{
    float:none;
    background-image:none;
    margin:0px;
    background-color: #FFFFFF;
}
.tab li li a{
    background-image:none;
    line-height:22px;
    color: #000000;
    float: none;
    height: 22px;
}
.tab li ul li a:hover{text-decoration:underline;}
.tab li.d li a{color:#000000;}
</style>
<script language="javascript">
var $ = function (d){return document.getElementById( d );};
var isIE = (document.all) ? true : false;
var Bind = function (obj,fun,arr){return function() {arr || (arr = arguments);return fun.apply(obj,arr);}};//绑定
var Tween =  function(t,b,c,d){return c*t/d + b;};//缓冲函数
function addEventHandler(oTarget, sEventType, fnHandler) {if (oTarget.addEventListener) {oTarget.addEventListener(sEventType, fnHandler, false);} else if (oTarget.attachEvent) {oTarget.attachEvent("on" + sEventType, fnHandler);} else {oTarget["on" + sEventType] = fnHandler;
    }
};//事件监听
function removeEventHandler(oTarget, sEventType, fnHandler) {
    if (oTarget.removeEventListener) {
        oTarget.removeEventListener(sEventType, fnHandler, false);
    } else if (oTarget.detachEvent) {
        oTarget.detachEvent("on" + sEventType, fnHandler);
    } else { 
        oTarget["on" + sEventType] = null;
    }
};//移除监听

var Timer = {};//Timer
Timer.add = function (fn){return new this.fn(fn)};
Timer.fn = function (fn){
  var timer;
  this.play = function (speed,only){
    speed || ( speed = 10 );
    if(only)timer = window.setTimeout(fn,speed);
    else timer = window.setInterval(fn,speed);
  };
  this.stop = function (){clearTimeout(timer);clearInterval(timer)};
};
//Mask 遮罩动画
var Mask = function (){
     this.fl = Timer.add(Bind(this,this.fn));
     this.from_num = 0;
     this.speed = 50;//动画速度,越大越慢
};
Mask.prototype.ready = function (ele,pos){
     if(this.ele)this.set(this.maxWidth,this.maxHeight);
     this.ele = ele;
     this.maxWidth = this.ele.offsetWidth;
     this.maxHeight = this.ele.offsetHeight;
     this.ele.style.position = "absolute";
     this.from_num = 0;
     if(!pos){
         var  x = ["left","center","right",""][parseInt(4*Math.random())],
              y = ["top","center","bottom",""][parseInt(4*Math.random())];
        if(x == "" && y == "")x = "left";//避免同时为""      
         this.position = [x,y];          
     }else{
        this.position = pos;
     }
     this.set(0,0);
     this.fl.stop();
};
Mask.prototype.start = function (){this.fl.play();};
Mask.prototype.stop = function (){this.fl.stop();};
Mask.prototype.set = function (width,height){//设置遮罩的矩形,用于定位遮罩的变换方向
    var t,r,b,l;
    switch(this.position[0]){
     case "left"   : 
          l = 0; 
          r = width; 
          break;
     case "center" : 
          l = (this.maxWidth - width)/2; 
          r = (this.maxWidth + width)/2;
          break;
     case "right"  : 
          l = this.maxWidth - width;
          r = this.maxWidth; 
          break;
     default:
          l = 0;
          r = this.maxWidth;       
    }
    switch(this.position[1]){
     case "top"    : 
          t = 0; 
          b = height; 
          break;
     case "center" : 
          t = (this.maxHeight - height)/2; 
          b = (this.maxHeight + height)/2;
          break;
     case "bottom"  : 
          t = this.maxHeight - height;
          b = this.maxHeight; 
          break;
     default :
          t = 0;
          b = this.maxHeight;
          break;      
    }
    this.ele.style.clip = "rect("
    + t + "px,"
    + r + "px,"
    + b + "px,"
    + l + "px)" ;
};
Mask.prototype.fn = function (){
     var w,h; 
     this.from_num ++ ;
     if(this.from_num<=this.speed){
        w = Tween(this.from_num,0,this.maxWidth,this.speed);
        h = Tween(this.from_num,0,this.maxHeight,this.speed);
        this.set(w,h);
     }else{
        this.fl.stop();
        //this.start();//若不需要重复动画,把这句注释,上句不注释
     }
     
};
function ImgFlash(box){
        this.box = box.getElementsByTagName("dl");
        this.ge = 4;//切换间隔秒数
        this.menu = [];
        this.mask = new Mask();//加载遮罩动画,不设置参数 即 随机效果
        this.zIndex = this.box.length;
        var _div = document.createElement('div');
        this.dang = 0;
        for(i=0;i<this.zIndex;i++){
            this.box[i].style.zIndex = this.zIndex-i;
            var _em = document.createElement('em'),_span = document.createElement('span');
            var _dt = this.box[i].getElementsByTagName("dt")[0];
            _dt.appendChild(_span);
            addEventHandler(_em,'mouseover',Bind(this,this.emEvent,[this.zIndex-i-1,true]));
            _div.appendChild(_em);
            this.menu.push(_em);
            if(this.zIndex-i==1){
            _em.className = 'd';
            }
        }
        box.appendChild(_div);
        addEventHandler(box,'mouseover',Bind(this,function(){this.fl.stop()}));
        addEventHandler(box,'mouseout',Bind(this,function(){this.fl.play(this.ge*1000)}));
        this.fl = Timer.add(Bind(this,this.enterFrame))
        this.fl.play(this.ge*1000);
}
ImgFlash.prototype.enterFrame = function(){
        var ddd = this.dang==2?0:this.dang+1;
        this.emEvent(ddd);    
};
ImgFlash.prototype.emEvent = function (index,b){
        if(b)this.fl.stop();
        if(index == this.dang)return;
        this.menu[this.menu.length-1-this.dang].className="";
        var odl = this.box[this.dang];
        this.zIndex++;
        this.dang = index;
        this.menu[this.menu.length-1-this.dang].className="d";
        var ndl = this.box[this.dang];
        var img = ndl.getElementsByTagName("img")[0];
        this.mask.ready(img);
        this.mask.start();
        ndl.style.zIndex = this.zIndex;
}
function Tab(id,type){
  var nav = id.getElementsByTagName("ul")[0].childNodes;
  var _nav,i=0;
  this.mask = new Mask();//初始化遮罩动画
  this.z = 1000;
  while(_nav = nav[i++]){
   if(_nav.className=="d")this.focusEle = _nav;
   if(_nav.childNodes.length>1){
    var A = _nav.getElementsByTagName("A")[0];
    addEventHandler(A,type,Bind(this,fun,[A]));
   }
   if(_nav.nodeType == 1)_nav.getElementsByTagName("UL")[0].style.zIndex = nav.length-i;
  }
  function fun(ele){
   var li = ele.parentNode;
   var ul = li.getElementsByTagName("UL")[0];
   this.z += 1
   ul.style.zIndex = this.z;
   if(li.className=="d")return;
   li.className+=(li.className.length>0? " ": "") + "d";
   this.focusEle.className=this.focusEle.className.replace(/( ?|^)d\b/g, "");
   this.focusEle = li;
   this.mask.ready(ul);
   this.mask.start();
  };
}
</script>
</head>
<body>
<div class="imgFlash" id="box">
       <dl>
        <dt><a href="#">神秘花园</a></dt>
    <dd><a href="#"><img src="http://www.webdm.cn/images/wall1_s.jpg" border="0" /></a></dd>
       </dl>
       <dl>
        <dt><a href="#">网页代码站</a></dt>
    <dd><a href="#"><img src="http://www.webdm.cn/images/wall2_s.jpg" border="0" /></a></dd>
       </dl>
       <dl>
        <dt><a href="#">人间仙境</a></dt>
    <dd><a href="#"><img src="http://www.webdm.cn/images/wall3_s.jpg" border="0" /></a></dd>
       </dl>
</div>
<br />
<br /> 
<br />
<br />
<div class="tab" id="tab1">
<ul>
 <li class="d"><a href="javascript:;">WEB前端</a>
   <ul>
     <li><a href="/" target="_blank">VB封装一个文本文件读写类含示例</a></li><li><a href="/" target="_blank">Csdn网站右下角的滑出弹出提示(带关闭功能)</a></li><li><a href="/" target="_blank">VC++做的精美仿XP开始菜单</a></li><li><a href="/" target="_blank">VB+Access学生综合档案管理系统</a></li><li><a href="/" target="_blank">Delphi随机抽取幸运观众Access数据库版</a></li><li><a href="/" target="_blank">多线程的VC++高速文件搜索代码</a></li>
   </ul>
  </li>
  <li><a href="javascript:;">源码下载</a>
    <ul>
     <li><a href="/" target="_blank">15个jQuery学习实例(菜单、滚动、层隐藏等)</a></li><li><a href="/" target="_blank">VB取汉字拼音首码(第一个字母)源码</a></li><li><a href="/" target="_blank">VB 多进制转换源程序</a></li><li><a href="/" target="_blank">杰奇网站管理系统 JIEQI CMS  v1.7</a></li>
    </ul>
  </li>
  <li><a href="javascript:;">短标题</a>
    <ul>
    <li><a href="/" target="_blank">Delphi版视频监控系统</a></li><li><a href="/" target="_blank">《Java2核心技术卷2:高级特性》第7版中文高清 PDF</a></li><li><a href="/" target="_blank">基于Delphi的HIS自动更新程序 v2.0</a></li><li><a href="/" target="_blank">C#早期开发的摄像头监控系统源码</a></li><li><a href="/" target="_blank">随机密码生成器VC++源程序</a></li>
    </ul>
  </li>
  <li><a href="javascript:;">更短</a>
   <ul>
     <li><a href="/" target="_blank">C# 酒店管理(SQL2005)</a></li><li><a href="/" target="_blank">云台C#家庭视频监控系统完整版</a></li><li><a href="/" target="_blank">VS2008开发的C#高校宿舍管理系统</a></li><li><a href="/" target="_blank">C#落雪无痕IP端口扫描器VS2005</a></li><li><a href="/" target="_blank">火狐浏览器 Firefox v3.5</a></li>
   </ul>
  </li>
</ul>
</div>
<script>
 new ImgFlash($("box"));//初始化
 new Tab($("tab1"),"mouseover");
</script>
</body>
</html>


标签:css代码

版权说明:如有标注说明此文章是本站 小小软件库 原创,转载请注明出处和附带本文链接;

  免责声明:

  本站提供的资源,都来自网络,版权争议与本站无关,所有内容及软件的文章仅限用于学习和研究目的。不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负,我们不保证内容的长久可用性,通过使用本站内容随之而来的风险与本站无关,您必须在下载后的24个小时之内,从您的电脑/手机中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。E-mail:46495512@qq.com

本文地址:https://www.ridaohang.com/daima/47.html


取消回复欢迎 发表评论:

请登录

忘记密码我要注册

分享到

温馨提示

感谢你的下载【欢迎支持本站哦!】

下载成功了么?或者链接失效了?

联系我们反馈


立即下载