js學習總結----輪播圖之漸隱漸現版

来源:http://www.cnblogs.com/diasa-fly/archive/2017/07/16/7188671.html
-Advertisement-
Play Games

具體代碼如下: <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Document</title><style>*{margin:0;padding:0;font-size:14px;-webkit-user-sele ...


具體代碼如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        *{
            margin:0;
            padding:0;
            font-size:14px;
            -webkit-user-select:none;
        }
        ul,li{
            list-style
        }
        img{
            display: block;
            border:none;
        }
        .banner{
            position:relative;
            width:1000px;
            height:300px;
            margin:0 auto;
            overflow:hidden;
        }
        .banner .bannerInner{
            width:100%;
            height:100%;
            background:url("../img/default.gif") no-repeat center center #e1e1e1;
        }
        .banner .bannerInner div{
            position:absolute;
            width:100%;
            height:100%;
            top:0;
            left:0;
            z-index:0;
            opacity:0;
            filter:alpha(opacity=0);
        }
        .banner .bannerInner img{
            display:none;
            width:100%;
            height:100%s;
        }

        .banner .bannerTip{
            position:absolute;
            height:18px;
            overflow:hidden;
            right:20px;
            bottom:20px;
            z-index:10;
        }
        .banner .bannerTip li{
            float:left;
            margin-left:10px;
            width:18px;
            height:18px;
            background:lightblue;
            cursor:pointer;
            border-radius:50%;
        }
        .banner .bannerTip li.bg{
            background:red;
        }

        .banner a{
            display:none;
            position:absolute;
            top:50%;
            z-index:20;
            margin-top:-22.5px;
            width:30px;
            height:45px;
            background:url("../img/pre.png");
            opacity:0.5;
            filter:alpha(opacity=50);
        }
        .banner a:hover{
            opacity:1;
            filter:alpha(opacity=100);
        }
        .banner a.bannerLeft{
            left:20px;
            background-position:0 0;
        }
        .banner a.bannerRight{
            right:20px;
            background-position:-50px 0;
        }
    </style>
</head>
<body>
    <div class='banner' id='banner'>
        <div class='bannerInner'>
            <div><img src="" alt="" trueImg="img/banner1.jpg"></div>
            <div><img src="" alt="" trueImg="img/banner2.jpg"></div>
            <div><img src="" alt="" trueImg="img/banner3.jpg"></div>
            <div><img src="" alt="" trueImg="img/banner4.jpg"></div>
        </div>
        <ul class='bannerTip'>
            <li class='bg'></li>
            <li></li>
            <li></li>
            <li></li>
        </ul>
        <a href="javascript:;" class='bannerLeft'></a>
        <a href="javascript:;" class='bannerRight'></a>
    </div>

    <script>
        var banner = document.getElementById('banner');
        var bannerInner = utils.firstChild(banner),bannerTip = utils.children(banner,"ul")[0],bannerLink = utils.children(banner,'a'),bannerLeft = bannerLink[0],bannerRight = bannerLink[1];
        var divList = bannerInner.getElementsByTagName('div');
        var imgList = bannerInner.getElementsByTagName('img');
        var oLis = bannerTip.getElementsByTagName('li');
        //1、Ajax讀取數據
        var jsonData = null;
        ~function(){
            var xhr = new XMLHttpRequest;
            xhr.open("get","json/banner.txt?_="+Math.random(),false);
            xhr.onreadystatechange = function(){
                if(xhr.readyState ===4 && /^2\d{2}$/.test(xhr.status)){
                    jsonData = utils.formatJSON(xhr.responseText)
                }
            }
            xhr.send(null)
        }()
        //2、數據綁定
        ~function(){
            var str = "",str2 = "";
            if(jsonData){
                for(var i = 0,len=jsonData.length;i<len;i++){
                    var curData = jsonData[i];
                    str+='<div><img src="" alt="" trueImg="'+curData['img']+'"></div>';
                    i===0?str2+="<li class='bg'></li>":str2+="<li></li>"
                }
            }
            bannerInner.innerHTMl = str;
            bannerTip.innerHTML = str2;
        }()

        //3、圖片的延遲載入
        window.setTimeout(lazyImg,500)
        function lazyImg(){
            for(var i = 0,len = imgList.length;i<len;i++){
                ~function(i){
                    var curImg = imgList[i];
                    var oImg = new Image;
                    oImg.src = curImg.getAttribute('trueImg');
                    oImg.onload = function(){
                        curImg.src = this.src;
                        curImg.style.display = block;
                        //只對第一張處理
                        if(i===0){
                            var curDiv = curImg.parentNode;
                            curDiv.style.zIndex = 1;
                            myAnimate(curDiv,{opacity:1},200);
                        }
                        oImg = null;
                    }
                }(i)
            }
        }
        //4、自動輪播
        var interval = 3000,autoTimer = null,step = 0;
        autoTimer = window.setInterval(autoMove,interval);
        function autoMove(){
            //當已經把最後一張展示完成後(step等於最後一張的索引),我們應該展示第一張,我們讓step = -1,這樣再經過一次累加,step就變為0,來展示第一張
            if(step === jsonData.length-1){
                step = -1
            }
            step++;
            setBanner();
        }
        //實現輪播圖切換效果的代碼
        function setBanner(){
            //1、讓step索引對應的那個DIV的zIndex的值為1,其他的zIndex為0 
            for(var i = 0,len = divList.length;i<len;i++){
                var curDiv = divList[i];
                if(i===step){
                    utils.css(curDiv,"zIndex",1)
                    //2、讓當前的透明度從0變為1,當動畫結束,我們需要讓其他的div的透明度的值直接變為0
                    myAnimate(curDiv,{opacity:1},200,function(){
                        var curDivSib = utils.siblings(this);
                        for(var k = 0,len = curDivSib.length;k<len;k++){
                            utils.css(curDivSib[k],'opacity',0)
                        }

                    })
                    continue
                }
                utils.css(curDiv,"zIndex",0)
            }
            //實現焦點對其
            for(i = 0,len = oLis.length;i<len;i++){
                var curLi = oLis[i];
                i === step?utils.addClass(curLi,"bg"):utils.removeClass(curLi,"bg");
            }

        }
        //5、實現滑鼠懸停停止自動輪播和離開在開啟自動輪播
        banner.onmouseover = function(){
            window.clearInterval(autoTimer);
            bannerLeft.style.display = bannerRight.style.display = "block"

        }
        banner.onmouseout = function(){
            autoTimer = window.setInterval(autoMove,interval);
            bannerLeft.style.display = bannerRight.style.display = "none"
        }
        //6、實現點擊焦點切換
        ~function(){
            for(var i = 0,len = oLis.length;i<len;i++){
                var curLi = oLis[i];
                curLi.index = i;
                curLi.onclick = function(){
                    step = this.index;
                    setBanner();
                }
            }
        }()
        //7、實現左右切換
        bannerRight.onclick = autoMove;
        bannerLeft.onclick = function(){
            if(step === 0){
                step = jsonData.length;
            }
            step--;
            setBanner();
        }
    </script>
</body>
</html>

 

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Document</title><style>*{margin:0;padding:0;font-size:14px;-webkit-user-select:none;}ul,li{list-style}img{display: block;border:none;}.banner{position:relative;width:1000px;height:300px;margin:0 auto;overflow:hidden;}.banner .bannerInner{width:100%;height:100%;background:url("../img/default.gif") no-repeat center center #e1e1e1;}.banner .bannerInner div{position:absolute;width:100%;height:100%;top:0;left:0;z-index:0;opacity:0;filter:alpha(opacity=0);}.banner .bannerInner img{display:none;width:100%;height:100%s;}
.banner .bannerTip{position:absolute;height:18px;overflow:hidden;right:20px;bottom:20px;z-index:10;}.banner .bannerTip li{float:left;margin-left:10px;width:18px;height:18px;background:lightblue;cursor:pointer;border-radius:50%;}.banner .bannerTip li.bg{background:red;}
.banner a{display:none;position:absolute;top:50%;z-index:20;margin-top:-22.5px;width:30px;height:45px;background:url("../img/pre.png");opacity:0.5;filter:alpha(opacity=50);}.banner a:hover{opacity:1;filter:alpha(opacity=100);}.banner a.bannerLeft{left:20px;background-position:0 0;}.banner a.bannerRight{right:20px;background-position:-50px 0;}</style></head><body><div class='banner' id='banner'><div class='bannerInner'><div><img src="" alt="" trueImg="img/banner1.jpg"></div><div><img src="" alt="" trueImg="img/banner2.jpg"></div><div><img src="" alt="" trueImg="img/banner3.jpg"></div><div><img src="" alt="" trueImg="img/banner4.jpg"></div></div><ul class='bannerTip'><li class='bg'></li><li></li><li></li><li></li></ul><a href="javascript:;" class='bannerLeft'></a><a href="javascript:;" class='bannerRight'></a></div>
<script>var banner = document.getElementById('banner');var bannerInner = utils.firstChild(banner),bannerTip = utils.children(banner,"ul")[0],bannerLink = utils.children(banner,'a'),bannerLeft = bannerLink[0],bannerRight = bannerLink[1];var divList = bannerInner.getElementsByTagName('div');var imgList = bannerInner.getElementsByTagName('img');var oLis = bannerTip.getElementsByTagName('li');//1、Ajax讀取數據var jsonData = null;~function(){var xhr = new XMLHttpRequest;xhr.open("get","json/banner.txt?_="+Math.random(),false);xhr.onreadystatechange = function(){if(xhr.readyState ===4 && /^2\d{2}$/.test(xhr.status)){jsonData = utils.formatJSON(xhr.responseText)}}xhr.send(null)}()//2、數據綁定~function(){var str = "",str2 = "";if(jsonData){for(var i = 0,len=jsonData.length;i<len;i++){var curData = jsonData[i];str+='<div><img src="" alt="" trueImg="'+curData['img']+'"></div>';i===0?str2+="<li class='bg'></li>":str2+="<li></li>"}}bannerInner.innerHTMl = str;bannerTip.innerHTML = str2;}()
//3、圖片的延遲載入window.setTimeout(lazyImg,500)function lazyImg(){for(var i = 0,len = imgList.length;i<len;i++){~function(i){var curImg = imgList[i];var oImg = new Image;oImg.src = curImg.getAttribute('trueImg');oImg.onload = function(){curImg.src = this.src;curImg.style.display = block;//只對第一張處理if(i===0){var curDiv = curImg.parentNode;curDiv.style.zIndex = 1;myAnimate(curDiv,{opacity:1},200);}oImg = null;}}(i)}}//4、自動輪播var interval = 3000,autoTimer = null,step = 0;autoTimer = window.setInterval(autoMove,interval);function autoMove(){//當已經把最後一張展示完成後(step等於最後一張的索引),我們應該展示第一張,我們讓step = -1,這樣再經過一次累加,step就變為0,來展示第一張if(step === jsonData.length-1){step = -1}step++;setBanner();}//實現輪播圖切換效果的代碼function setBanner(){//1、讓step索引對應的那個DIV的zIndex的值為1,其他的zIndex為0 for(var i = 0,len = divList.length;i<len;i++){var curDiv = divList[i];if(i===step){utils.css(curDiv,"zIndex",1)//2、讓當前的透明度從0變為1,當動畫結束,我們需要讓其他的div的透明度的值直接變為0myAnimate(curDiv,{opacity:1},200,function(){var curDivSib = utils.siblings(this);for(var k = 0,len = curDivSib.length;k<len;k++){utils.css(curDivSib[k],'opacity',0)}
})continue}utils.css(curDiv,"zIndex",0)}//實現焦點對其for(i = 0,len = oLis.length;i<len;i++){var curLi = oLis[i];i === step?utils.addClass(curLi,"bg"):utils.removeClass(curLi,"bg");}
}//5、實現滑鼠懸停停止自動輪播和離開在開啟自動輪播banner.onmouseover = function(){window.clearInterval(autoTimer);bannerLeft.style.display = bannerRight.style.display = "block"
}banner.onmouseout = function(){autoTimer = window.setInterval(autoMove,interval);bannerLeft.style.display = bannerRight.style.display = "none"}//6、實現點擊焦點切換~function(){for(var i = 0,len = oLis.length;i<len;i++){var curLi = oLis[i];curLi.index = i;curLi.onclick = function(){step = this.index;setBanner();}}}()//7、實現左右切換bannerRight.onclick = autoMove;bannerLeft.onclick = function(){if(step === 0){step = jsonData.length;}step--;setBanner();}</script></body></html>


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 金庸經典《射雕英雄傳》里,黃蓉為了讓洪七公交自己和靖哥哥武功,天天對師傅美食相待,在做了“玉笛誰家聽落梅”這樣一些世間珍品之後,告訴師傅說今天要做的是"炒白菜"。洪七公露出非常欣賞的眼光,說:“好,我倒要看看你怎樣化腐朽為神奇。”上周五聽了一個我們內部的深度學習講座,基本這方面處於初始探索階段。上周 ...
  • 函數要短。短才方便閱讀、維護和設計。 函數只做一件事。依照單一職責原則(一個類只會因為一個原因改變)設計函數。一個函數要麼進行流程式控制制或邏輯判斷,要麼改變某事物的狀態,要麼計算並返回結果,要麼調用多個下一抽象級的其他函數(另一種流程式控制制而已)。不要有多餘功能。 我們可以把函數分解成多個抽象層級來設計 ...
  • 0.代碼概述 代碼說明:第一章中的代碼為了突出模塊化拆分的必要性,所以db採用了真實操作。下麵代碼中dao層使用了列印日誌模擬插入db的方法,方便所有人運行demo。 1.項目代碼地址:https://github.com/kingszelda/SpringAopPractice 2.結構化拆分,代 ...
  • 題外,Chrome最近在耗電量方面超過了Edge,不過記憶體占用還是高啊,開發時偶爾用用。這不,http://jqueryui.com/menu/的官方菜單都支持的不好,改改吧! 打開jquery-ui.css 找到.ui-menu .ui-menu-item項 註釋/刪除掉list-style-im ...
  • 今天在切圖的時候,碰到一個相容性的問題,很幸運最後通過張金鑫老師的文章解決了這個問題!但在閱讀張老師文章的時候,我有個地方不明白,在網上查了下也沒找到我想要的答案,後來自己想了半天好像是這麼回事,現在我把我的想法寫出來,如果有不對的地方,大家一定要指出哦。 如圖(事例1): 這是張老師文章中的一段事 ...
  • 一 概述 1.什麼是HTML? HyperText Markup Language,超文本標記語言,客戶端技術的技術,負責頁面展示。 2.HTML的特點 標簽不區分大小寫。 3.請求地址 HTML是客戶端技術的基礎,HTML運行在客戶端,面向整個互聯網,為了能夠保證正確地定位資源,在書寫請求地址時, ...
  • 2016年10月我參加了在北京舉行的DevDays Asia 2016 - Office 365應用開發”48小時黑客馬拉松“,我開發的一個Word Add-In Demo——WordTemplateHelper獲得了二等獎。在會場有幸結識了陳希章老師,在與陳老師的交流中受益良多,得知陳老師在準備一 ...
  • yahoo軍規一共分7類共35條: 1.儘量減少HTTP請求數 分類: 內容 80%的終端用戶響應時間都花在了前端上,其中大部分時間都在下載頁面上的各種組件:圖片,樣式表,腳本,Flash等等。減少組件數必然能夠減少頁面提交的HTTP請求數。這是讓頁面更快的關鍵。 減少頁面組件數的一種方式是簡化頁面 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...