js实现数字自由落体弹跳canvas动画效果代码
代码语言:html
所属分类:动画
代码描述:js实现数字自由落体弹跳canvas动画效果代码
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<html>
<head>
<style>
html, body {
touch-action: none;
content-zooming: none;
margin: 0;
padding: 0;
background: #333;
position: absolute;
width: 100%;
height: 100%;
}
#screen {
width: 100%;
height: 100%;
margin: auto auto;
position: fixed;
top: 0;
bottom: 0;
left: 0;
right: 0;
background: #000;
cursor: pointer;
}
</style>
</head>
<body>
<canvas id="screen" width="642" height="679"></canvas><script>
! function () {
"use strict";
/* ==== screen setup ==== */
var screen = {
elem: document.getElementById("screen"),
width: 0,
height: 0,
top: 0,
left: 0,
resize: function () {
var o = screen.elem;
screen.width = o.offsetWidth;
screen.height = o.offsetHeight;
for (screen.left = 0, screen.top = 0; o != null; o = o.offsetParent) {
screen.left += o.offsetLeft;
screen.top += o.offsetTop;
}
screen.elem.width = screen.width;
screen.elem.height = screen.height;
if (PHY2D) {
PHY2D.deleteStatic();
PHY2D.rectangle(screen.width / 2, screen.height + 50, screen.width, 100, 0, 0);
PHY2D.rectangle(screen.width / 2, -screen.height * 2, screen.width, 100, 0, 0);
PHY2D.rectangle(-50, 0, 100, screen.height * 4, 0, 0);
PHY2D.rectangle(screen.width + 50, 0, 100, screen.height * 4, 0, 0);
}
}
}
screen.elem.onselectstart = function () {
return false;
}
screen.elem.ondrag = function () {
return false;
}
var ctx = screen.elem.getContext("2d");
window.addEventListener('resize', screen.resize, false);
/* ==== pointer setup ==== */
var pointer = {
pos:
{
x: 0,
y: 0
},
active: false,
down: function (e, touch) {
e.preventDefault();
var p = touch ? e.touches[0]: e;
(!touch && document.setCapture) && document.setCapture();
this.pos.x = p.clientX - screen.left;
this.pos.y = p.clientY - screen.top;
this.active = true;
},
up: function (e, touch) {
e.preventDefault();
(!touch && document.releaseCapture) && document.releaseCapture();
this.active = false;
},
move: function (e, touch) {
e.preventDefault();
var p = touch ? e.touches[0]: e;
if (this.active) {
this.pos.x = p.clientX - screen.left;
this.pos.y = p.clientY - screen.top;
}
}
}
if ('ontouchstart' in window) {
screen.elem.ontouchstart = function (e) {
pointer.down(e, true);
}.bind(pointer);
screen.elem.ontouchmove = function (e) {
pointer.move(e, true);
}.bind(pointer);
screen.elem.ontouchend = function (e) {
pointer.up(e, true);
}.bind(pointer);
screen.elem.ontouchcancel = function (e) {
pointer.up(e, true);
}.bind(pointer);
}
document.addEventListener("mousedown", function (e) {
pointer.down(e, false);
}.bind(pointer), true);
document.addEventListener("mousemove", function (e) {
pointer.move(e, false);
}.bind(pointer), true);
document.addEventListener("mouseup", function (e) {
pointer.up(e, false);
}.bind(pointer), true);
/* ==== vector 2D library ==== */
function Vector(x, y) {
this.x = x || 0.0;
this.y = y || 0.0;
}
Vector.prototype = {
set: function (x, y) {
this.x = x;
this.y = y;
return this;
},
dot: function (v) {
return this.x * v.x + this.y * v.y;
},
lenSqr: function () {
return this.x * this.x + this.y * this.y;
},
transform: function (v, m) {
this.x = m.cos * v.x - m.sin * v.y + m.pos.x;
this.y = m.sin * v.x + m.cos * v.y + m.pos.y;
return this;
},
rotate: function (v, m) {
this.x = m.cos * v.x - m.sin * v.y;
.........完整代码请登录后点击上方下载按钮下载查看
















网友评论0