今天又来学习一个新的例子,sprite这里说的sprite不是css技术中的sprite,虽然有点相同。css的background-position属性使得HTML元素(如一个div)可以显示大背景图中的一小部分。因此一个大图像可以作为许多小sprite图像的容器。关键是在于确定每个sprite的背景图的位置。
最关键的sprite代码
var DHTMLSprite = function (params) { var width = params.width, height = params.height, imagesWidth = params.imagesWidth, // 添加sprite div $element保存对最后一个sprite div的引用 $element = params.$drawTarget.append(‘<div/>‘).find(‘:last‘), elemStyle = $element[0].style, mathFloor = Math.floor; // 设置div的相关属性 $element.css({ position : ‘absolute‘, width : width, height : height, backgroundImage : ‘url(‘ + params.images + ‘)‘ }); var that = { // 确定 sprite div 在父元素上的位置 draw: function (x, y) { elemStyle.left = x + ‘px‘; elemStyle.top = y + ‘px‘; }, // 设置sprite div 的具体背景图 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了 可以运行看一下效果:
具体文件:http://pan.baidu.com/s/1mgocLMK