将背景图像序列更改为spritesheet
change a sequence of background images as spritesheet
我有一个对话屏幕要开发,我计划每毫秒更改一次背景图像,使其看起来像动画。我尝试过使用jquery settimeout和setinterval,但这两种方式都会挂起浏览器,任何关于如何完成任务的想法。
function change_background(new_image_source) {
var myimage = $( '#spriteanim' );
myimage.attr('src','style/images/Sprites/Screen1/'+new_image_source+'.png');
console.log(myimage.attr('src'));
timer = setTimeout( function () {
new_image_source = new_image_source+1;
change_background(new_image_source);
}, 50);
if(new_image_source>=10899){
change_background(new_image_source);
clearTimeout(timer);
}
}
更改src属性永远不会如您所愿。这是因为浏览器需要时间来加载图像。即使它被缓存,它仍然太慢,无法设置动画。我建议将您的图像组合到sprite中,并更改背景位置。您甚至可以使用纯css转换来实现这一点。
例如->http://jsfiddle.net/krasimir/uzZqg/
HTML
<div class="image"></div>
CSS
.image {
background: url('...');
width: 200px;
height: 200px;
transition: all 4000ms;
-webkit-transition: all 4000ms;
}
.image:hover {
background-position: -500px 0;
}
您甚至可以使用关键帧。
以下是如何预加载图像http://jsfiddle.net/krasimir/DfWJm/1/
HTML
<div id="preloader"></div>
JS-
var images = [
'http://www.australia.com/contentimages/about-landscapes-nature.jpg',
'http://www.australia.com/contentimages/about-landscapes-nature.jpg',
'http://www.australia.com/contentimages/about-landscapes-nature.jpg',
'http://www.australia.com/contentimages/about-landscapes-nature.jpg',
'http://www.australia.com/contentimages/about-landscapes-nature.jpg',
'http://www.australia.com/contentimages/about-landscapes-nature.jpg'
];
var preloader = document.getElementById("preloader");
var preloadImages = function(callback) {
if(images.length == 0) {
callback();
return;
}
var image = images.shift();
var img = document.createElement("IMG");
img.setAttribute("src", image);
preloader.appendChild(img);
img.addEventListener("load", function() {
console.log("image loaded");
preloadImages(callback);
});
}
preloadImages(function() {
// your animation starts here
alert("Images loaded");
});
当然,您可以使用display:none隐藏#preloaderdiv;
结账http://spritely.net/
它将处理设置精灵表动画的细节。让我们来设置FPS并控制播放。
我认为"每毫秒"有点太快了
图像加载需要一些时间。我认为,在开始动画之前,你应该加载所有的图像一次。这将需要一些时间,因为您使用的图像数量似乎为10899。每隔几毫秒就隐藏一个。"几毫秒",而不是"每毫秒",应该做你的工作。
更新:
将您的图像命名为spriteanim0
、spriteanim1
。。。像这样。在所有图像都已加载,并且所有图像都分配了display: none
之后,调用此js函数:
var new_image_source1;
function change_background(prev_image_source, new_image_source) {
document.getElementById('spriteanim' + prev_image_source).style.display = 'none';
document.getElementById('spriteanim' + new_image_source).style.display = 'block';
if (new_image_source >= 10899)
new_image_source1 = 0;
else
new_image_source1 = new_image_source + 1;
window.setTimeout(
function () {
change_background(new_image_source, new_image_source1);
},
50);
}
您可以尝试此操作,并根据需要相应地更改setTimeout
间隔值。
相关文章:
- 使用JS如何动态更改显示的html文件中的文本背景颜色
- 可以在这里为背景图像设置滤镜吗
- 如何使用jquery更改html中的背景颜色
- 使用 js 将背景图像设置为 HTML
- 使用带括号的图像URL作为jQuery的背景
- 如何使用css动画/javascript使具有背景图像的元素出现
- 循环浏览多个身体背景图像
- 将淡入淡出添加到“我的身体背景滑块”
- 浮动图像左作为背景-css
- Fullpage.js-视频+背景在同一部分
- 背景图像顶部的滚动图像不移动
- 在pdfmake中嵌入背景图像
- PhoneGap选项卡栏自定义字体,背景图案
- Javascript对象类在单击时打开窗口进行颜色选择,并在更改时替换对象背景颜色
- 不同页面背景的body标记上的角度ng样式
- 修复选择菜单时的背景图像
- 导航菜单-悬停时的背景行为怪异
- JS幻灯片与CSS背景颜色变化
- 使用css()设置背景图像;不起作用
- 将背景图像序列更改为spritesheet