JQuery插件开发初探——图片轮播

在熟悉了插件开发的结构以后,自己尝试着做了一个稍微复杂一点的小功能:图片轮播插件。

由于之前使用的一款图片轮播插件,性能不高,页面加载的时候需要载入全部的图片,因此速度很慢。

通过自己做这个小插件,能控制一下图片的加载,每次只加载一张图片。当然翻转的特效肯定没有人家的绚丽。

之前尝试了在div中内嵌img标签的方式,但是左右两侧的翻页按钮不容易摆放,于是采用了3个div的方式,最外面一个大的div,背景图片为照片图片,其中左右各两个小div,放翻页按钮。

由于开始的时候需要频繁调样式,因此大div中的代码都是写死的,等到调试成功后,再放到js里去append。

参数中定义了需要展示的照片列表和div的宽高:

var defaults = {
            height: '300px',
             '1000px',
            imgs: ['images/photo/1.JPG', 'images/photo/2.JPG', 'images/photo/3.JPG', 'images/photo/4.JPG', 'images/photo/5.JPG']
        };

图片拉伸用了比较新的CSS属性:"background-size", '100% 100%'

核心思想就是每次随机一直图片作为背景,随机的原则是不和上一张重复。

以下是完整的js代码:

/***************************************************
* DannyImagesShow
* 图片轮播
* Ver:1.0
* Author:DannyWang
* Date:2013-10-15
* 图片轮播
  Example: 
  var opt = {
            height: '500px',
             '100%',
            imgs: ['images/photo/6.JPG', 'images/photo/7.JPG', 'images/photo/8.JPG', 'images/photo/9.JPG']
        };
  $("#imgDiv").dannyImagesShow(opt);
****************************************************/
(function ($) {
    $.fn.dannyImagesShow = function (options) {
        //定义默认值
        var defaults = {
            height: '300px',
             '1000px',
            imgs: ['images/photo/1.JPG', 'images/photo/2.JPG', 'images/photo/3.JPG', 'images/photo/4.JPG', 'images/photo/5.JPG']
        };
        //合并用户自定义属性,默认属性
        var options = $.extend(defaults, options);
        var gNumber=0;
        this.each(function () {
            var imgDiv = $(this);
            imgDiv.css("height", options.height);
            imgDiv.css("width", options.width);
            imgDiv.css("background-image", 'url("' + options.imgs[1] + '")');
            imgDiv.css("background-position", 'center');
            imgDiv.css("background-size", '100% 100%');

            var pagerHTML = '';
            pagerHTML += '<div >;
            pagerHTML += '<a >;
            pagerHTML += '</div>';
            pagerHTML += '<div >;
            pagerHTML += '<a >;
            pagerHTML += '</div>';

            imgDiv.append(pagerHTML);

            var btnPrev = $(".left");
            var btnNext = $(".right");

            btnPrev.click(function () {
                var n = getImagesNum(1, options.imgs.length);
                while (n === gNumber) {
                    n = getImagesNum(1, options.imgs.length);
                }
                gNumber = n;
                $("#imgDiv").hide();
                imgDiv.css("background-image", 'url("' + options.imgs[n - 1] + '")');
                $("#imgDiv").slideDown();
            });

            btnNext.click(function () {
                var n = getImagesNum(1, options.imgs.length);
                while (n === gNumber) {
                    n = getImagesNum(1, options.imgs.length);
                }
                gNumber = n;
                $("#imgDiv").hide();
                imgDiv.css("background-image", 'url("' + options.imgs[n - 1] + '")');
                $("#imgDiv").slideDown();
            });

            $("#leftbar").bind("mouseover", function () {
                $("#leftbarButton").show();
            });
            $("#leftbar").bind("mouseout", function () {
                $("#leftbarButton").hide();
            });

            $("#rightbar").bind("mouseover", function () {
                $("#rightbarButton").show();
            });
            $("#rightbar").bind("mouseout", function () {
                $("#rightbarButton").hide();
            });

            $(".left").hide();
            $(".right").hide();
        });

        //获取随机数
        var getImagesNum = function (under, over) {
            switch (arguments.length) {
                case 1: return parseInt(Math.random() * under + 1);
                case 2: return parseInt(Math.random() * (over - under + 1) + under);
                default: return 0;
            }
        }
    }
})(jQuery);