jquery 圖片無縫切換


想要和園友分享一下學習jquery的經驗、總結,更希望園友提出點建議。

第一次寫,有不好的地方請多多見諒!

文筆有限,很多時候不知道怎么來描述,唉、硬傷啊!!那只好多做了,貼代碼。。。

ok,廢話少說,先上Demo,里面有5個Demo,從簡單的jquery到重構為jquery小插件。

包含兩個效果,手風琴效果和點擊圖片放大

 上菜:Demo

無縫連接原理:

        1、定義顯示區域,比如你有十張圖片每次只顯示5張。假如一張圖片寬150px,那么可以用一個750px的div來包含一個1500px的ul/div。

        

css:
       .myul {
            width: 1500px;
            overflow: hidden;
            position: absolute;
        }

        .myul li {
            width: 150px;
            height: 150px;
            float: left;
            overflow: hidden;
            position: relative;
        }
    .slidediv {
            float: left;
            width: 750px;
            height: 150px;
            overflow: hidden;
            position: relative;
        }


HTML:

<div class="slidediv">
            <ul class="myul">
                <li>
                    <a class="img_b">
                        <img  alt="" width="150" height="150" src="images/1_s.jpg"/>
                    </a>
                </li>
                <li>
                    <a class="img_b" href="#">
                        <img alt="" width="150" height="150" src="images/2_s.jpg"/>
                    </a>
                </li>
           </ul>
</div>
View Code

       2、讓整個ul移動一個li單位的距離,然后把移出顯示區的li放到后面,再把ul的位置復原。不斷地重復這種方式。

      

         

        

    <script type="text/javascript">
        $(function () {
            var $Ul = $(".myul");
            var fn = setInterval(autoScroll2, 2000);
            $Ul.mouseover(function () {
                clearInterval(fn);
            }).mouseout(function () {
                        fn = setInterval(autoScroll2, 2000);
                    });
            function autoScroll2() {
                $Ul.stop().animate({ left: -150 }, 500, function () {
                    $(this).css({ left: 0 }).find("li:first").appendTo(this);//ul向左移動150,把移出的li放到最后,ul復原。
                });
            }
        });
    </script>
View Code

重構成小插件

        整個jquery 無縫切換原理很簡單,可以通過重構把它變成小插件,這樣就可以在多處使用了。

        我重構的不好,很多功能沒有加上去,不過我覺得懂得原理了,變成小插件就看自己DIY了,整個過程核心不變功能一點點加上去就會慢慢完善了。

        看看我重構好的小插件,在Demo 里的js也有(ImgSlide.js)。具體效果看Demo2,我是偷懶,要在html定義li的高寬,這個完全可以在js插件里設置。

(function ($) {
    $.fn.ImgSlide = function (options) {
        var defaults = {
            showImages: 3,//默認顯示圖片數量
            speed: 400,//移動速度
            leftBtn: ".leftBtn", //默認左按鈕
            rightBtn: ".rightBtn", //默認右按鈕
            autoSlide: true,//默認自動移動為true
            RightSlid: false, //默認向右移動為false
            autoSpeed: 2000,//自動移動的時間
            moreSlide: "setOne" //多處圖片移動,設置不同的class
        };
        var options = $.extend(defaults, options);
        var $this = $(this),
            li = $this.find('li'),
            myFn;
        var li_width = li.outerWidth(true);
        var liwidth =  li.width();
        $this.css({
            width: 5500,
            left:- li_width,
            overflow: "hidden",
            position: "absolute"
        });
        li.css({
            float: 'left',
            overflow: "hidden",
            position: "relative"
        });
        init();
        $(options.leftBtn).click(function () {
            MoveLeft();
        });
        //點擊按鈕向右移動;
        $(options.rightBtn).click(function () {
            MoveRight();
        });
        function init() {
            var showWidth = li_width * options.showImages ;
            $this.wrap("<div class='slidediv'></div>");
            $('.slidediv').css({
                height:liwidth,
                width: showWidth,
                overflow: "hidden",
                position: "relative",
                float: "left"
            });
            $this.animate({ left: 0 },0, function () {
                $(this).css({ left: -li_width }).find("li:last").prependTo(this);
            });
            if (options.autoSlide) {
                if (options.RightSlid) {
                    myFn = setInterval(MoveRight, options.autoSpeed);
                    autoSlides(MoveRight);
                }
                else {
                    myFn = setInterval(MoveLeft, options.autoSpeed);
                    autoSlides(MoveLeft);
                }
            }
        }
        function MoveLeft() {
            $this.stop().animate({ left: 0 }, options.speed, function () {
                $(this).css({ left: -li_width }).find("li:last").prependTo(this);
            });
        }

        function MoveRight() {
            $this.stop().animate({ left: -li_width*2 }, options.speed, function () {
                $(this).css({ left: -li_width }).find("li:first").appendTo(this);
            });
        }
        function autoSlides(fn) {
            $this.mouseover(function () {
                clearInterval(myFn);
            }).mouseout(function () {
                    myFn = setInterval(fn, options.autoSpeed);
                });
            $(options.leftBtn).mouseover(function () {
                clearInterval(myFn);
            }).mouseout(function () {
                    myFn = setInterval(fn, options.autoSpeed);
                });
            $(options.rightBtn).mouseover(function () {
                clearInterval(myFn);
            }).mouseout(function () {
                    myFn = setInterval(fn, options.autoSpeed);
                });
        }
    }
})(jQuery);
View Code

       在html引用,很方便吧!!!

    <script type="text/javascript">
        $(function () {
            $('.myul').ImgSlide({
                showImages: 6
            });
        });
    </script>
View Code

手風琴效果和圖片放大效果在Demo里也有。可以看一下,歡迎和我討論。

我是新手,有很多不妥的地方希望園友能提出,非常感謝。一起學習交流。。

手風琴效果

圖片放大

 

 

版權所有,轉載請注明出處,謝謝!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM