JavaScript 帧动画
2023-09-11 14:22:55 时间
JavaScript 实现帧动画的方式有三种
- 图片元素的 element.style.backgroundPosition = “x y”;
- 父容器的 overflow:hidden; 和图片src元素的 element.style.transform = “translate(x, y)”;
- 使用canvas动态绘制
JavaScript 实现帧动画较CSS实现的优点
- 方便切割动画帧。由于每帧大小都是固定的,因此可以写成函数,而不用像CSS那样把每帧的位置都写一遍
- 动画状态可控。可以在任意时刻暂停或者恢复动画,或者在动画完成时执行某些操作。
代码实战
<html>
<head>
<style>
.imageStyle {
width: 241px;
height: 180px;
border-radius: 20px;
border: 1px solid black;
box-shadow: 5px 5px 5px #888;
margin: 5px;
}
.imageBg {
background-image: url("frameAnim.png");
}
#translateAnimDiv {
overflow: hidden;
display: inline-block;
}
</style>
</head>
<body>
<img id="positionAnimImg" class="imageStyle imageBg">
<div id="translateAnimDiv" class="imageStyle">
<img id="translateAnimImg" src="frameAnim.png">
</div>
<canvas id="canvas" width="241px" height="180px" class="imageStyle">Your browser can not support canvas</canvas>
<script>
window.onload = function() {
var positionAnimImg = document.getElementById("positionAnimImg");
var index = 0;
setInterval(function() {
positionAnimImg.style.backgroundPosition = -index*241 + "px 0";
index++;
if(index >= 7) {
index = 0;
}
}, 300);
var translateAnimImg = document.getElementById("translateAnimImg");
var index = 0;
setInterval(function() {
translateAnimImg.style.transform = "translate(-" + index*14.3 + "%, 0)";
index++;
if(index >= 7) {
index = 0;
}
}, 300);
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
var index = 0;
setInterval(function() {
ctx.drawImage(translateAnimImg, index*241, 0, 240, 180, 0, 0, 240, 180);
index++;
if(index >= 7) {
index = 0;
}
}, 300);
}
</script>
</body>
</html>
图片素材见鄙人上一篇博文《CSS3 帧动画》
http://blog.csdn.net/chy555chy/article/details/56489497
相关文章
- JavaScript 工作原理之七-Web Workers 分类及 5 个使用场景
- 浅议javascript的内存泄露
- 使用原生的javascript封装动画函数(有callback功能)
- Javascript Prototypes之旅(A Plain English Guide to JavaScript Prototypes译文)
- JavaScript变量声明提前
- Javascript实现万年历(日历表)
- JavaScript -- 标签 , Break 和 Continue 语句
- [Javascript] Filter out Duplicates from Flat JavaScript Array with array.filter / reduce / Set
- [Javascript] How to use JavaScript's String.replace
- Javascript正则匹配数字,中英文,中横线,下划线,utf-8中文
- JavaScript -- throw、try 和 catch
- [Javascript] Conditionally spread entries to a JavaScript object
- [Javascript] Replicate JavaScript Constructor Inheritance with Simple Objects (OLOO)
- [Javascript] Understanding the .constructor property on JavaScript Objects
- [Javascript] Link to Other Objects through the JavaScript Prototype Chain
- [Javascript] JavaScript赋值时的传值与传址
- [Javascript] Redirect the browser using JavaScript
- javascript案例41——创建对象的三种方式
- javascript案例14——判断奇偶数
- js(JavaScript)判断两个数组是否相等
- javascript中的变量定义
- 从零开始学_JavaScript_系列(七)——jquery(复选框及互斥、div块、修改css、标签数组、ajax连续加载)
- 【 华为OD机试 2023】 箱子之字形摆放(C++ Java JavaScript Python)
- javascript常用代码【格式化时间日期】