[jQuery] 网页背景切换的插件

思路:

  1. 通过jq改变元素的css,来实现背景的切换

功能:

  1. 背景切换

相关知识点

  1. $.fn是指jQuery的命名空间,加上fn的方法及属性,会对jQuery实例有效。

  2. extend(dest,src1,src2,src3...);

    2.1 它的含义是将src1,src2,src3...合并到dest中,返回值为合并后的dest.如果说后面的参数如果和前面的参数存在相同的名称,那么后面的会覆盖前面的参数值。

    2.2 上述的extend方法原型中的dest参数是可以省略的,如果省略了,则该方法就只能有一个src参数,而且是将该src合并到调用extend方法的对象中去

  即:

    jQuery.fn.extend(object); 给jQuery对象添加方法。

    jQuery.extend(object); 为扩展jQuery类本身.为类添加新的方法。

代码

  

(function($) {

    $.fn.bgSlide = function(options){

        // 默认参数
        var defaults = {
            bgs: [],//储存背景
            model: 'default', //可选项 custom
            max: 13,//切换的个数
            bg: 0,//当前的位置
            times: 5000,//切换时间
            speed: 'fast', // 可换为 mormal  , slow
            opacity: 0.4,//透明度
            abs: this, //默认参数请勿修改,除非你已知他的用处
            arr: [],//请勿修改,缓存区
            url: ''
        };

        // 获得参数
        var ops = $.extend(defaults, options);

        if (ops.model == 'custom') {
            ops.max = ops.bgs.length
        }

        // 插件的方法
        var method = {

            // 获得随机切换的背景的索引
            rand: function () {
                ops.bg = parseInt(Math.random() * ops.max);
                return ops.bg;
            },

            // 切换时间
            time: function () {
                setInterval(function () {
                    method.isChangeBg();
                }, ops.times)
            },


            // 判断当前图片是否已经切换过
            contains: function (arr, obj) {
                var i = arr.length;
                while (i--) {
                    if (arr[i] === obj) {
                        return true;
                    }
                }
                return false;
            },

            //  切换背景中
            isChangeBg: function () {
                //获得新的索引
                method.rand();

                if (ops.model == 'default') {

                    //判断是否完成一个周期
                    if (ops.arr.length == ops.max) {
                        ops.arr = [];
                    }

                    // 判断图片是否切换过
                    if (method.contains(ops.arr, ops.bg)) {
                        method.isChangeBg()
                    } else {
                        // 将未切换的索引添加到缓存区
                        ops.arr.push(ops.bg);
                        // 改变背景
                        method.changeBg();
                    }
                } else if (ops.model == 'custom') {

                    //判断是否完成一个周期
                    if (ops.arr.length == ops.max) {
                        ops.arr = [];
                    }

                    // 判断图片是否切换过
                    if (method.contains(ops.arr, ops.bg)) {
                        method.isChangeBg()
                    } else {
                        // 将未切换的索引添加到缓存区
                        ops.arr.push(ops.bg);
                        // 改变背景
                        method.changeBg();
                    }
                }
                //console.log(this)
            },

            // 改变背景
            changeBg: function () {
                switch (ops.model) {
                    // 读取默认图片路径
                    case 'default':
                        ops.url = 'url("./staic/images/index/bg' + ops.bg + '.jpg")';
                        break;
                    
                    // 读取自定义图片路径
                    case 'custom':
                        ops.url = 'url("' + ops.bgs[ops.bg] + '")';
                        break;
                }

                // 修改css
                $(ops.abs).fadeTo(ops.speed, ops.opacity, function () {
                    $(ops.abs).css({
                        'background-image': ops.url,
                        'background-size': '100%',
                        'background-position': 'fixed',
                        'background-repeat': 'no-repeat',
                        '-webkit-transition': 'background-image 0.5s',
                        '-moz-transition': 'background-image 0.5s',
                        '-ms-transition': 'background-image 0.5s',
                        '-o-transition': 'background-image 0.5s',
                        'transition': 'background-image 0.5s'
                    }).delay(ops.speed).fadeTo(ops.speed, 1);
                });
            }
        };


        method.isChangeBg();
        method.time();


    }


})(jQuery);

  

  

Demo

猜你喜欢

转载自www.cnblogs.com/SoYang/p/11397527.html