(function ($) {
    $.fn.bouncyPlugin = function (option) {
        var dhtml = function (params) {
            var width = params.width,
                height = params.height,
                imageWidth = params.imageWidth,
                $element = params.target.append('<div/>').find(':last'),
                eleStyle = $element[0].style;
            $element.css({
                position: 'absolute',
                width: width,
                height: height,
                backgroundImage: 'url(' + params.image + ')'
            });
            var that = {
                draw: function (x, y) {
                    eleStyle.left = x + 'px';
                    eleStyle.top = y + 'px';
                },
                changeImage: function (index) {
                    index *= width;
                    var vset = -Math.floor(index / imageWidth) * height,
                        hset = -index % imageWidth;
                    eleStyle.backgroundPosition = hset + 'px ' + vset + 'px';
                },
                show: function () {
                    eleStyle.display = 'block';
                },
                hide: function () {
                    eleStyle.display = 'none';
                },
                destroy: function () {
                    $element.remove();
                }
            };
            return that;
        };
        var bouncy = function (params) {
            var x = params.x,
                y = params.y,
                xdir = params.xdir,
                ydir = params.ydir,
                xmax = params.xmax,
                ymax = params.ymax,
                animIndex = 0,
                that = dhtml(params);
            that.moveAndDrow = function () {
                x += xdir;
                y += ydir;
                animIndex += xdir > 0 ? 1 : -1;
                animIndex %= 5;
                animIndex += animIndex < 0 ? 5 : 0;
                ((xdir < 0 && x < 0) || (xdir > 0 && x >= xmax)) && (xdir *= -1);
                ((ydir < 0 && y < 0) || (ydir > 0 && y >= ymax)) && (ydir *= -1);
                that.changeImage(animIndex);
                that.draw(x, y);
            };
            return that;
        };
        var bouncyBoss = function (num, target) {
            var bys = [], i = 0;
            for (; i < num; i++) {
                bys.push(bouncy({
                    image: 'img.png',
                    imageWidth: 256,
                    width: 64,
                    height: 64,
                    target: target,
                    x: Math.random() * target.width() - 64,
                    y: Math.random() * target.height() - 64,
                    xdir: Math.random() * 4 - 2,
                    ydir: Math.random() * 4 - 2,
                    xmax: target.width() - 64,
                    ymax: target.height() - 64
                }));
                (function () {
                    for (var i = 0, len = bys.length; i < len; i++) {
                        bys[i].moveAndDrow();
                    }
                    setTimeout(arguments.callee, 10);
                })();
            }
        };
        option = $.extend({}, $.fn.bouncyPlugin.defaults, option);
        return this.each(function () {
            var target = $(this);
            target.css('background-color', option.bgColor);
            bouncyBoss(option.number, target);
        });
    };
    $.fn.bouncyPlugin.defaults = {
        bgColor: '#f00',
        number: 10
    };
})(jQuery);
[
 本帖最后由 冰镇柠檬汁儿 于 2015-6-5 22:49 编辑 ]