您现在的位置:首页 >> 前端 >> 内容

DHTML实现 sprite

时间:2014/2/14 12:59:02 点击:

  核心提示:今天又来学习一个新的例子,sprite这里说的sprite不是css技术中的sprite,虽然有点相同。css的background-position属性使得HTML元素(如一个p)可以显示大背景图中...

今天又来学习一个新的例子,sprite这里说的sprite不是css技术中的sprite,虽然有点相同。css的background-position属性使得HTML元素(如一个p)可以显示大背景图中的一小部分。因此一个大图像可以作为许多小sprite图像的容器。关键是在于确定每个sprite的背景图的位置。

最关键的sprite代码

var DHTMLSprite = function (params) {
            var width = params.width,
                height = params.height,
                imagesWidth = params.imagesWidth,

                // 添加sprite p  $element保存对最后一个sprite p的引用
                $element = params.$drawTarget.append('

').find(':last'), elemStyle = $element[0].style, mathFloor = Math.floor; // 设置p的相关属性 $element.css({ position : 'absolute', width : width, height : height, backgroundImage : 'url(' + params.images + ')' }); var that = { // 确定 sprite p 在父元素上的位置 draw: function (x, y) { elemStyle.left = x + 'px'; elemStyle.top = y + 'px'; }, // 设置sprite p 的具体背景图 changeImage: function (index) { index *= width; var vOffset = -mathFloor(index / imagesWidth) * height; var hOffset = -index % imagesWidth; elemStyle.backgroundPosition = hOffset + 'px ' + vOffset + 'px'; }, show: function () { elemStyle.display = 'block'; }, hide: function () { elemStyle.display = 'none'; }, destroy: function () { $element.remove(); } }; // Return the instance of DHTMLSprite. return that; };

创建一个动态的bouncySprite对象,主要实现sprite的动态化:

var bouncySprite = function (params) {
            var x = params.x,
                y = params.y,
                xDir = params.xDir,
                yDir = params.yDir,
                maxX = params.maxX,
                maxY = params.maxY,
                animaIndex = 0,
                that = DHTMLSprite(params);

                // sprite移动函数
                that.moveAndDraw = function () {
                    x += xDir;
                    y += yDir;
                    animaIndex += xDir > 0 ? 1 : -1;
                    animaIndex %= 5;
                    animaIndex += animaIndex < 0 ? 5 : 0;

                    if ((xDir < 0 && x < 0) || (xDir > 0 && x >= maxX)) {
                        xDir = -xDir;
                    }

                    if ((yDir < 0 && y < 0) || (yDir > 0 && y >= maxY)) {
                        yDir = -yDir;
                    }

                    // 使背景看起来运动  若不清楚可以注释之后看效果
                    that.changeImage(animaIndex);
                    that.draw(x, y);
                };

                return that;
        };

最后一个bouncySprite合集bouncyBoss

var bouncyBoss = function(numBouncy, $drawTarget) {
            var bouncys = [];
            for (var i = 0; i < numBouncy; i++) {
                bouncys.push(bouncySprite({
                    images : 'images/cogs.png',
                    imagesWidth : 256,
                    width : 64,
                    height : 64,
                    $drawTarget : $drawTarget,
                    x : Math.random() * ($drawTarget.width() - 64),
                    y : Math.random() * ($drawTarget.height() - 64),
                    xDir : Math.random() * 4 - 2,
                    yDir : Math.random() * 4 - 2,
                    maxX : $drawTarget.width() - 64,
                    maxY : $drawTarget.height() - 64
                }));
            }

            var moveAll = function () {
                var len = bouncys.length;
                for (var i = 0; i < len; i++) {
                    bouncys[i].moveAndDraw();
                }
                setTimeout(moveAll, 10);
            }
            moveAll();
        };

然后ok了 可以运行看一下效果:

DHTML实现 sprite

具体文件:https://pan.baidu.com/s/1mgocLMK



Tags:DH HT TM ML 
作者:网络 来源:DHTML实现 sp