• 前端设计——js实现图片切换的淡入淡出


    1、网页结构如图所示

    2、页面布局设计细节

      ①分块:一个小方块是一个div。

      ②无序列表一般是竖直排放的,可以通过float让其水平排放。float:left;

      ③三个小方块是浮动上去的,所以要用到position定位。A盒子要相对B盒子进行移动,那么B盒子就设置为relative,A盒子要设置为absolute。这样才能让其进行相对移动。距离的调节,使用top  bottom   left  right  去调节A到合适的位置。如果要垂直居中可以使用{top:50%和margin-top:-A盒子的高度的一半}来调节。

      ④文字的垂直居中,可以让line-height属性的值和盒子一样高即可。

    3、布局代码

    <!DOCTYPE html>
    <html>
      <head>
        <title>Banner.html</title>
        
        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
        <meta http-equiv="description" content="this is my page">
        <meta http-equiv="content-type" content="text/html; charset=UTF-8">
        
        <!--<link rel="stylesheet" type="text/css" href="./styles.css">-->
        <style type="text/css">
            *{margin:0;padding:0;}
            #banner{width:1226px;height:460px;margin:40px auto;position:relative;}
            #banner .pic{width:1226px;height:460px;posion:relative;}
            #banner .pic ul li{width:1226px;height:460px;list-style:none;position:absolute;display:none;}
            #banner .tab{width:100px;height:10px;position:absolute;bottom:25px;right:25px;}
            #banner .tab ul li{list-style:none;width:6px;height:6px;background:#111;border:2px solid #666;
                cursor:pointer;border-radius:50%;float:left;margin:0 5px;}
            #banner .tab .on{background:#e5e5e5;}
            #banner .tab ul li:hover{background:#e5e5e5;}
            
            #banner .btn a{position:absolute;width:40px;height:70px;background:rgba(0,0,0,0);color:#fff;font-size:40px;
                    text-align:center;line-height:70px;top:50%;margin-top:-35px;text-decoration:none;
            }
            #left{left:0px;}
            #right{right:0px;}
            #banner .btn a:hover{background:rgba(0,0,0,0.5);cursor:pointer;}
        </style>
        
      </head>
      
      <body>
        <div id="banner">
            <div class="pic">
                <ul>
                    <li style="display:block"><a href="#"><img src="images/1.jpg" alt="" title="" width="" height=""/></a></li>
                    <li><a href="#"><img src="images/2.jpg" alt="" title="" width="" height=""/></a></li>
                    <li><a href="#"><img src="images/3.jpg" alt="" title="" width="" height=""/></a></li>
                    <li><a href="#"><img src="images/4.jpg" alt="" title="" width="" height=""/></a></li>
                    <li><a href="#"><img src="images/5.jpg" alt="" title="" width="" height=""/></a></li>
                </ul>
                </div> 

           <div class="tab">
              <ul>
                <li class="on"></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
              </ul>
            </div>

            <div class="btn">
            <a id="left" href="javascript:vid(0);">&lt;</a>
            <a id="right" href="javascript:void(0);">&gt;</a>
            </div>
        </div>
      </body>
    </html>

    4、布局效果

    5、js实现图片切换时的淡入淡出效果

      ①js基本知识:

        a、document.getElementsByClassName("class的名字");如果浏览器支持这样获所有的这个class名字的对象。

        b、document.getElementsByClassName("class的名字")[i].getElementsByTagName("标签的名字");获取网页中第i个class下的标签对象。

      ②首先是js实现左右耳朵的点击切换。

        用循环去处理,判断id。

      ③js实现tab点击切换。  

      ④切换时的淡入(要显示)的效果。

      ⑤切换时的淡出(要消失)的效果  

        <script>
            var oBtn=getClass("btn");
            var oPicLi=getClass("pic")[0].getElementsByTagName("li");//获取div中的li标签
            var oTabLi=getClass("tab")[0].getElementsByTagName("li");//获取div中的li标签
            var oBtnA=oBtn[0].getElementsByTagName("a");//获取div中的a标签对象
            var index=0;
            for(var i=0;i<oTabLi.length;i++){//根据点击的tab去切换图片
                oTabLi[i].index=i;//这个地方需要注意,点击的tab要和图片index保持一致
                oTabLi[i].onclick=function(){//tab按钮点击事件
                    index=this.index;
                    for(var j=0;j<oTabLi.length;j++){//消除class样式
                        oTabLi[j].className="none";
                        //oPicLi[j].style.display="none";
                        if(j!=index){
                            fadeOut(oPicLi[j],1000);
                        }
                    }
                    this.className="on";//oTabLi[index].className="on";
                    //oPicLi[index].style.display="block";
                    fadeIn(oPicLi[index],1000);
                };
            }
            for(var i=0;i<oBtnA.length;i++){
                oBtnA[i].onclick=function(){//左右耳朵的点击事件
                    if(this.id=="right"){//右耳朵点击事件
                        index++;
                        //oPicLi[(index-1)%5].style.display="none";
                        fadeOut(oPicLi[(index-1)%5],1000);
                        oTabLi[(index-1)%5].className="none";
                        oTabLi[index%5].className="on";
                        //oPicLi[index%5].style.display="block";
                        fadeIn(oPicLi[index%5],1000);
                    }else {//左耳朵点击事件
                        if(index==0)index=5;
                        index--;
                        //oPicLi[(index+1)%5].style.display="none";
                        fadeOut(oPicLi[(index+1)%5],1000);
                        oTabLi[(index+1)%5].className="none";
                        oTabLi[index%5].className="on";
                        //oPicLi[index%5].style.display="block";
                        fadeIn(oPicLi[index%5],1000);
                    }
                };
            }
            function fadeIn(obj,time){//淡入函数  实现time毫秒后显示,原理是根据透明度来完成的
                var startTime=new Date(); 
                obj.style.opacity=0;//设置下初始值透明度
                obj.style.display="block";
                var timer=setInterval(function(){
                    var nowTime=new Date();
                    var prop=(nowTime-startTime)/time;
                    if(prop>=1){
                        prop=1;//设置最终系数值
                        clearInterval(timer);
                    }
                    obj.style.opacity=prop;//透明度公式: 初始值+系数*(结束值-初始值)
                },13);//每隔13ms执行一次function函数
            };
            
            function fadeOut(obj,time){
                var startTime=new Date(); 
                obj.style.opacity=1;//设置下初始值透明度
                obj.style.display="block";
                var timer=setInterval(function(){
                    var nowTime=new Date();
                    var prop=(nowTime-startTime)/time;
                    if(prop>=1){
                        prop=1;//设置最终系数值
                        clearInterval(timer);
                    }
                    obj.style.opacity=1+prop*(0-1);//透明度公式: 初始值+系数*(结束值-初始值)
                },13);//每隔13ms执行一次function函数
            };
            
            function getClass(cName){//获取页面中所有class为cName的div对象
                if(document.getElementsByClassName){//如果浏览器支持这样获取一个class
                    return document.getElementsByClassName(cName);
                }else {//如果浏览器不支持上述访问
                    var allE=document.getElementsByTagName("*");//获取页面中所有的dom对象
                    var reg=new RegExp("\b"+cName+"\b");
                    var arr=[];
                    for(var i=0;i<allE.length;i++){
                        if(reg.test(allE[i].className)){//如果匹配
                            arr.push(allE[i]);
                        }
                    }
                    return arr;//返回匹配的所有div对象,因为class不唯一,所以可能会返回多个div
                }
            };
        </script>

    6、代码

    <!DOCTYPE html>
    <html>
      <head>
        <title>Banner.html</title>
        
        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
        <meta http-equiv="description" content="this is my page">
        <meta http-equiv="content-type" content="text/html; charset=UTF-8">
        
        <!--<link rel="stylesheet" type="text/css" href="./styles.css">-->
        <style type="text/css">
            *{margin:0;padding:0;}
            #banner{width:1226px;height:460px;margin:40px auto;position:relative;}
            #banner .pic{width:1226px;height:460px;posion:relative;}
            #banner .pic ul li{width:1226px;height:460px;list-style:none;position:absolute;display:none;}
            #banner .tab{width:100px;height:10px;position:absolute;bottom:25px;right:25px;}
            #banner .tab ul li{list-style:none;width:6px;height:6px;background:#111;border:2px solid #666;
                cursor:pointer;border-radius:50%;float:left;margin:0 5px;}
            #banner .tab .on{background:#e5e5e5;}
            #banner .tab ul li:hover{background:#e5e5e5;}
            
            #banner .btn a{position:absolute;width:40px;height:70px;background:rgba(0,0,0,0);color:#fff;font-size:40px;
                    text-align:center;line-height:70px;top:50%;margin-top:-35px;text-decoration:none;
            }
            #left{left:0px;}
            #right{right:0px;}
            #banner .btn a:hover{background:rgba(0,0,0,0.5);cursor:pointer;}
        </style>
        
      </head>
      
      <body>
        <div id="banner">
            <div class="pic">
                <ul>
                    <li style="display:block"><a href="#"><img src="images/1.jpg" alt="" title="" width="" height=""/></a></li>
                    <li><a href="#"><img src="images/2.jpg" alt="" title="" width="" height=""/></a></li>
                    <li><a href="#"><img src="images/3.jpg" alt="" title="" width="" height=""/></a></li>
                    <li><a href="#"><img src="images/4.jpg" alt="" title="" width="" height=""/></a></li>
                    <li><a href="#"><img src="images/5.jpg" alt="" title="" width="" height=""/></a></li>
                </ul>
                </div>
                <div class="tab">
                 <ul>
                     <li class="on"></li>
                     <li></li>
                     <li></li>
                     <li></li>
                     <li></li>
                 </ul>  
            </div>
            
        
            <div class="btn">
            <a id="left" href="javascript:void(0);" >&lt;</a>
            <a id="right" href="javascript:void(0);">&gt;</a>
            </div>
        
        </div>
        
        <script>
            var oBtn=getClass("btn");
            var oPicLi=getClass("pic")[0].getElementsByTagName("li");//获取div中的li标签
            var oTabLi=getClass("tab")[0].getElementsByTagName("li");//获取div中的li标签
            var oBtnA=oBtn[0].getElementsByTagName("a");//获取div中的a标签对象
            var index=0;
            for(var i=0;i<oTabLi.length;i++){//根据点击的tab去切换图片
                oTabLi[i].index=i;//这个地方需要注意,点击的tab要和图片index保持一致
                oTabLi[i].onclick=function(){//tab按钮点击事件
                    index=this.index;
                    for(var j=0;j<oTabLi.length;j++){//消除class样式
                        oTabLi[j].className="none";
                        //oPicLi[j].style.display="none";
                        if(j!=index){
                            fadeOut(oPicLi[j],1000);
                        }
                    }
                    this.className="on";//oTabLi[index].className="on";
                    //oPicLi[index].style.display="block";
                    fadeIn(oPicLi[index],1000);
                };
            }
            for(var i=0;i<oBtnA.length;i++){
                oBtnA[i].onclick=function(){//左右耳朵的点击事件
                    if(this.id=="right"){//右耳朵点击事件
                        index++;
                        //oPicLi[(index-1)%5].style.display="none";
                        fadeOut(oPicLi[(index-1)%5],1000);
                        oTabLi[(index-1)%5].className="none";
                        oTabLi[index%5].className="on";
                        //oPicLi[index%5].style.display="block";
                        fadeIn(oPicLi[index%5],1000);
                    }else {//左耳朵点击事件
                        if(index==0)index=5;
                        index--;
                        //oPicLi[(index+1)%5].style.display="none";
                        fadeOut(oPicLi[(index+1)%5],1000);
                        oTabLi[(index+1)%5].className="none";
                        oTabLi[index%5].className="on";
                        //oPicLi[index%5].style.display="block";
                        fadeIn(oPicLi[index%5],1000);
                    }
                };
            }
            function fadeIn(obj,time){//淡入函数  实现time毫秒后显示,原理是根据透明度来完成的
                var startTime=new Date(); 
                obj.style.opacity=0;//设置下初始值透明度
                obj.style.display="block";
                var timer=setInterval(function(){
                    var nowTime=new Date();
                    var prop=(nowTime-startTime)/time;
                    if(prop>=1){
                        prop=1;//设置最终系数值
                        clearInterval(timer);
                    }
                    obj.style.opacity=prop;//透明度公式: 初始值+系数*(结束值-初始值)
                },13);//每隔13ms执行一次function函数
            };
            
            function fadeOut(obj,time){
                var startTime=new Date(); 
                obj.style.opacity=1;//设置下初始值透明度
                obj.style.display="block";
                var timer=setInterval(function(){
                    var nowTime=new Date();
                    var prop=(nowTime-startTime)/time;
                    if(prop>=1){
                        prop=1;//设置最终系数值
                        clearInterval(timer);
                    }
                    obj.style.opacity=1+prop*(0-1);//透明度公式: 初始值+系数*(结束值-初始值)
                },13);//每隔13ms执行一次function函数
            };
            
            function getClass(cName){//获取页面中所有class为cName的div对象
                if(document.getElementsByClassName){//如果浏览器支持这样获取一个class
                    return document.getElementsByClassName(cName);
                }else {//如果浏览器不支持上述访问
                    var allE=document.getElementsByTagName("*");//获取页面中所有的dom对象
                    var reg=new RegExp("\b"+cName+"\b");
                    var arr=[];
                    for(var i=0;i<allE.length;i++){
                        if(reg.test(allE[i].className)){//如果匹配
                            arr.push(allE[i]);
                        }
                    }
                    return arr;//返回匹配的所有div对象,因为class不唯一,所以可能会返回多个div
                }
            };
        </script>
      </body>
    </html>
    javascript:vid(0);
  • 相关阅读:
    tyvj4751 NOIP春季系列课程 H's Problem (树状数组)
    卡牌分组([AtCoder ARC073]Ball Coloring)
    bzoj1036 [ZJOI2008]树的统计Count (树链剖分+线段树)
    bzoj2287 POJ Challenge 消失之物(背包)
    不能建立引用数组
    CString和string的区别
    防止应用程序重复启动
    public,protected,private
    ATL
    c++头文件中定义全局变量
  • 原文地址:https://www.cnblogs.com/sylz/p/5664435.html
Copyright © 2020-2023  润新知