javascript - 使用 JQuery 从 PSD 图层创建动画帧

标签 javascript jquery animation frames psd

我有一个 PSD 文件,其中有一堆图层,这些图层是动画的帧。如何使用 JQuery/JavaScript 创建动画?

我是否必须将每个图层保存为单独的图像,有没有办法让一个图像具有多个图层动画?为了澄清,我不希望实际图像移动,我只想显示不同的图层,就好像它们是动画的帧一样。使用 JavaScript 完成此操作的标准方法是什么?

谢谢!

最佳答案

这是一个演示 JavaScript 计时器 + 单个图像方法的 fiddle 。

fiddle :http://jsfiddle.net/ZVFu8/2/

基本思想是创建一个包含图像名称的数组。

var img_name_arr = [];
var img_name_root = "anim-";
var img_name_ext = ".gif";
var num_images = 12;

// init arr of img names assuming frames are named [root]+i+[extension]
for (i = 0; i<=num_images; i++) {
    img_name_arr.push(img_name_root + i + img_name_ext);
}    

对于动画,请使用 setInterval()。在 javascript 中,间隔会定期执行。您指定要执行的代码以及代码运行的时间间隔(以毫秒为单位)。

每次调用间隔时,您都可以通过将图像标记的“src”属性设置为 image_name 数组中的下一个索引来显示新图像。

// Create an interval, and save a handle to the interval so it can be stopped later
anim_interval = setInterval(function() {
    $("#player").attr("src", s + img_name_arr[(anim_frame++ % num_images)+1] );
}, frame_interval);

根据动画的长度和每个图像文件的大小,可能需要通过预加载这些图像来优化。在动画开始之前,您可以为每个图像创建一个 img 标签并将其隐藏。然后,您实际上将隐藏当前图像并在前一个图像的位置取消隐藏下一个图像,而不是更改“src”属性来更改图像。

如果您想在本地运行,这里是完整的代码:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

<a id="anim_control" href="">Start</a>
<img id="player" src="" />


<script>
var s = "http://" + atob("YmVucmlkb3V0LmNvbQ==") + "/";
var img_name_arr = [];
var img_name_root = "anim-";
var img_name_ext = ".gif";
var num_images = 12;

var framerate = 1; // Desired frames per second
var frame_interval = 1000/framerate;


$(function(){
    // Document is ready
    // init arr of img names
    for (i = 0; i <= num_images; i++) {
        img_name_arr.push(img_name_root + i + img_name_ext);
    }


    var anim_interval = null;
    var playing = false;
    var anim_frame = 0;

    // Define an interval that will execute every [frame_interval] milliseconds
    $("#anim_control").on("click", function(e) {
        e.preventDefault();
        if (playing == true) {
            playing = false;
            $(this).html("Start");
            clearInterval(anim_interval);
        } else {
            playing = true;
            $(this).html("Stop");
            anim_interval = setInterval(function() {
                //console.log(s + img_name_arr[(anim_frame++ % num_images)+1]);
                $("#player").attr("src", s + img_name_arr[(anim_frame++ % num_images)+1] );
            }, frame_interval);
        }
    });
});
</script>

<style>
#player {
    width: 320px;
    height: 240px;
    border: 1px solid #000;
}
</style>

关于javascript - 使用 JQuery 从 PSD 图层创建动画帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16267225/

相关文章:

javascript - jQuery UI 对话框在打开时不遵守位置选项

jquery - block 位置固定在浏览器的准确宽度以下

ios - 如何在 IOS 中为 SVG 路径设置动画?

javascript - 进度条提交动画后提交表单

javascript - 我们可以提供适用于平板电脑的 Chrome 应用吗?

php - 通过 HTML 链接调用 PHP 函数(无形式)

javascript - 如何获取标记名以前缀开头的 DOM 元素

javascript - 返回延迟对象或 null

javascript - 如何使用 $.each JQuery 循环 JSON 对象?

animation - 当我运行此示例 pygame 代码时,DOS 窗口出现并突然消失,无需等待任何用户输入