js學習總結----jquery版本輪播圖及extend擴展

来源:http://www.cnblogs.com/diasa-fly/archive/2017/07/18/7200783.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-select:none;
        }
        ul,li{
            list-style:none;
        }
        img{
            display:block;
            border:none;
        }
        a{
            text-decoration: none;
        }
        .banner{
            position:relative;
            margin:10px auto;
            width:1000px;
            height:300px;
            overflow:hidden;
        }
        .bannerInner{
            width:100%;
            height:100%;
            background:url("../img/default.gif") no-repeat center center;
        }
        .bannerInner div{
            position:absolute;
            top:0;
            left:0;
            z-index:0;
            width:100%;
            height:100%;
            opacity: 0;
            filter:alpha(opacity=0);
        }
        .bannerInner div img{
            display:none;
            width:100%;
            height:100%;
        }
        .banner .bannerTip{
            position:absolute;
            right:20px;
            bottom:20px;
            z-index:10;
            overflow:hidden;
        }
        .banner .bannerTip li{
            float:left;
            margin-left:10px;
            width:18px;
            height:18px;
            background:lightblue;
            border-radius:50%;
            cursor:pointer;
        }
        .banner .bannerTip li.bg{
            background:orange;
        }
        .banner a{
            display:none;
            position:absolute;
            top:50%;
            margin-top:-22.5px;
            z-index:10;
            width:30px;
            height:45px;
            opacity: 0.5;
            filter:alpha(opacity=50);
            background-image:url('../img/pre.png');

        }
        .banner a.bannerLeft{
            left:20px;
            background-position:0 0;
        }
        .banner a.bannerRight{
            right:20px;
            background-position:-50px 0;
        }
        .banner a:hover{
            opacity: 1;
            filter:alpha(opacity=100);
        }
    </style>
</head>
<body>
    <div class='banner' id='bannerFir'>
        <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>
        jQuery.fn.extend({
            banner:myBanner
        })
        //通過jQuery選擇器或者篩選的方法獲取到的jQuery集合是不存在dom映射機制的,之前獲取到的dom集合,之後再頁面中HTML結構改變了,集合中的內容不會跟著自動發生變化(JS獲取的元素集合有DOM映射的機制)
        function myBanner(selector,ajaxURL,interval){
            var $banner = $("#"+selector);
            var $bannerInner = $banner.children(".bannerInner"),$divList = null,$imgList = null;
            var $bannerTip = $banner.children(".bannerTip"),$oLis = null
            var $bannerLeft = $banner.children(".bannerLeft"),$bannerRight = $banner.children(".bannerRight")

            //1、Ajax讀取數據
            var jsonData = null;
            $.ajax({
                url:ajaxURL+"?_="+Math.random(),
                type:'get',
                dataType::"json",
                async:false,//當前的請求是同步的
                success:function(data){
                    jsonData = data;

                }
            })
            //2、實現數據的綁定
            function bindData(){
                var str = "",str2 = "";
                if(jsonData){
                    //原生的jsonData使用$.each()
                    $.each(jsonData,function(index,item){
                        str+='<div><img src="" alt="" trueImg="'+item["img"]+'"></div>';
                        index===0?str2+='<li class="bg"></li>':str2+='<li></li>'
                    })

                    $bannerInner.html(str);
                    $bannerTip.html(str2);
                    $divList = $bannerInner.children("div")
                    $imgList = $bannerInner.find('img')
                    $oLis = $bannerTip.children("li")
                }
            }
            //3、實現圖片的延遲載入
            window.setTimeout(lazyImg,500);
            function lazyImg(){
                //jquery元素集合 直接寫$imgList.each()
                $imgList.each(function(index,item){
                    var _this = this;
                    var oImg = new Image;
                    oImg.src = $(this).attr("trueImg");//$(this)等價於$(item)
                    oImg.onload = function(){
                        $(_this).prop('src',this.src).css("display","block")//內置屬性使用prop
                    }
                })
                $divList.eq(0).css("zIndex",1).animate({opacity:1},300);
            }
            //封裝一個輪播圖切換的效果
            function changeBanner(){
                var $curDiv = $divList.eq(step);
                $curDiv.css("zIndex",1).siblings().css("zIndex",0);
                $curDiv.animate({opacity:1},300,function(){
                    $(this).siblings().css("opacity",0)
                })
                $oLis.eq(step).addClass("bg").siblings().removeClass('bg')
            }
            //4、實現自動輪播
            interval = interval || 3000;
            var step = 0,autoTimer = null;
            autoTimer = window.setInterval(autoMove,interval)
            function autoMove(){
                if(step === jsonData.length-1){
                    step = -1;
                }
                step++;
                changeBanner();
            }
            //5、控制左右按鈕的顯示隱藏和自動輪播的開始和暫停
            $banner.on('mouseover',function(){
                window.clearInterval(autoTimer);
                $bannerLeft.css("display","block")
                $bannerRight.css("display","block")
            }).on('mouseout',function(){
                autoTimer = window.setInterval(autoMove,interval);
                $bannerLeft.css("display","none")
                $bannerRight.css("display","none")

            })
            //6、實現焦點切換
            $oLis.on('click',function(){
                step = $(this).index();
                changeBanner();
            })

            //7、實現左右切換
            $bannerRight.on('click',autoMove);
            $bannerLeft.on('click',function(){
                if(step===0){
                    step = jsonData.length;
                }
                step--;
                changeBanner();
            });

        }


        //外部使用
        $().banner("bannerFir","json/banner.txt",1000)
    </script>
</body>
</html>

 


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

-Advertisement-
Play Games
更多相關文章
  • 在使用zepto進行微信網頁開發的時候,遇到一個情況,在本頁面存在四個TAB欄,每點擊一個欄會顯示相應的內容,下圖這種: 現在有一個需求是,用戶點擊了後退按鈕,需要回到上一次點擊的tab欄。 這個需求可以使用history對象進行進行處理。 首先就是history.pushState方法和histo ...
  • 網頁中動態的顯示系統日期時間 當前時間: var e = function(selector) { return document.querySelector(selector) } var startTime = function() { var d = new Date() var td = d ...
  • es6的Iterator(迭代器) 迭代器允許每次訪問數據集合的一個元素,當指針指向數據集合最後一個元素是,迭代器便會退出。它提供了 next() 函數來遍歷一個序列,這個方法返回一個包含 done 和 value 屬性的對象。 javascript var arr = [1,2,3,4,5,6]; ...
  • 產品經理的最重要的一項技能就是熟練使用原型工具,畫出優秀的產品原型。但是,新手產品經理往往很容易進去一個誤區:別人用什麼,我也跟著學什麼。就比如說,看到別人在用Axure,那覺得它一定也適合我,也跟著去學,而沒有去想這個工具學起來難不難,是否適合這個階段的自己。作為一個入行三年的產品經理,我經常被新 ...
  • html代碼:<a href='javascript:void(0);' onclick='Delete(\""+ index +"\")' class='opt-btn'>刪除</a> /*** * json數據 * */var userData = {"total":2,"rows":[ { " ...
  • ng 配置@ngModule({ imports: [ BrowserModule ], //導入模塊 declarations: [ AppComponent ], //導入組件 providers: [ ] //導入服務(service) }) 在app主模塊下 app.module 引入大模塊 ...
  • 大家都知道在css中的單位,一般都包括有px,%,em等單位,另外css3新增加一個單位rem。 其中px,%等單位平時在傳統佈局當中使用的比較頻繁,大家也比較熟悉,不過px單位在進行自適應佈局的過程當中則會有些力不從心,大部分的解決方案是使用%為單位配合@media媒介查詢來進行自適應佈局。不過還 ...
  • 首先要能獲取datagrid 的row對象 即:var row = $('#datagrid').datagrid('getData').rows[index]; 之後我們就可以通過類似row.name(欄位名稱)來獲取row各個欄位(列)的值了。 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...