HTML5求自动在闪,HTML5 重复而不停闪烁的团状物
JavaScript
语言:
JaveScriptBabelCoffeeScript
确定
var fsCanvas = document.getElementById("canvas"),
ctx;
var glitchImageData,
originalImageData,
pixels;
var patternWidth = 96,
patternHeight = 96,
patternCanvas,
patternContext,
pattern;
var cosCache0 = [],
cosCache1 = [];
// these control glitching, and are in turn controlled by TweenMax
var gvars = {
waveAmp0:0,
waveFrq0:4,
waveOfs0:0,
waveAmp1:0,
waveFrq1:4,
waveOfs1:0,
pos0:0,
pos1:0
};
window.onload = function() {
createPatternImage();
initFullScreenCanvas();
createImageData();
processImageData();
setupTweens();
requestAnimationFrame(loop);
};
function createPatternImage() {
var canvas = document.createElement('canvas'),
c = canvas.getContext('2d');
canvas.width = patternWidth;
canvas.height = patternHeight;
c.fillStyle = '#000';
c.fillRect(0, 0, patternWidth, patternHeight);
c.fillStyle = '#fff';
c.beginPath();
c.arc(patternWidth * 0.5, patternHeight * 0.5, patternHeight * 0.25, 0, Math.PI * 2);
c.fill();
// c.fillRect(32, 32, patternWidth - 64, patternHeight - 64);
patternCanvas = canvas;
patternContext = c;
}
function initFullScreenCanvas() {
ctx = fsCanvas.getContext('2d');
}
function createImageData() {
originalImageData = patternContext.getImageData(0, 0, patternWidth, patternHeight);
glitchImageData = patternContext.getImageData(0, 0, patternWidth, patternHeight);
}
function processImageData() {
var data = originalImageData.data,
pixelCount = data.length / 4,
pixelIndex = 0,
x, y;
pixels = [];
for (var i = 0; i < pixelCount; i++) {
pixelIndex = i * 4;
x = i % patternWidth;
y = Math.floor(i / patternHeight);
if (!pixels[y]) pixels[y] = [];
pixels[y][x] = [
data[pixelIndex + 0],
data[pixelIndex + 1],
data[pixelIndex + 2]
];
}
}
function setupTweens() {
var ts = 1; // for testing
var tl0 = new TimelineMax({repeat:-1, yoyo:true});
tl0.to(gvars, 2, {waveAmp0:4, waveFrq0:12, waveOfs0:32, ease:Cubic.easeInOut, delay:0.25});
tl0.timeScale(ts);
var tl1 = new TimelineMax({repeat:-1, yoyo:true});
tl1.to(gvars, 2.5, {waveAmp1:6, waveFrq1:8, waveOfs1:16, ease:Cubic.easeInOut, delay:0.25});
tl1.timeScale(ts);
var tl2 = new TimelineMax({repeat:-1, yoyo:true});
tl2.to(gvars, 3, {pos0:196, ease:Cubic.easeInOut, delay:0});
tl2.timeScale(ts);
var tl3 = new TimelineMax({repeat:-1, yoyo:true});
tl3.to(gvars, 3, {pos1:-196, ease:Expo.easeInOut, delay:0.5});
tl3.timeScale(ts);
}
function update() {
var data = glitchImageData.data,
row,
pixelIndex = 0;
var fx, fy;
var rx, ry,
gx, gy,
bx, by;
var wave0Sin,
wave1Sin,
wave0Cos,
wave1Cos,
pos0,
pos1;
cosCache0.length = 0;
cosCache1.length = 0;
for (var y = 0; y < patternHeight; y++) {
row = pixels[y];
fy = y / patternHeight;
wave0Sin = Math.sin(gvars.waveOfs0 + gvars.waveFrq0 * fy) * gvars.waveAmp0;
wave1Sin = Math.sin(gvars.waveOfs1 + gvars.waveFrq1) * gvars.waveAmp1;
pos0 = gvars.pos0;
pos1 = gvars.pos1;
for (var x = 0; x < patternWidth; x++) {
pixelIndex = (y * patternWidth + x) * 4;
fx = x / patternWidth;
if (cosCache0[x] === undefined) {
cosCache0[x] = wave0Cos = Math.cos(gvars.waveOfs0 + gvars.waveFrq0 * fx) * gvars.waveAmp0;
}
else {
wave0Cos = cosCache0[x];
}
if (cosCache1[x] === undefined) {
cosCache1[x] = wave1Cos = Math.cos(gvars.waveOfs1 + gvars.waveFrq1) * gvars.waveAmp1;
}
else {
wave1Cos = cosCache1[x];
}
rx = x + wave0Sin * wave1Sin + pos0;
ry = y + wave1Cos;
gx = x + wave0Cos;
gy = y + wave1Sin * wave0Cos + pos1;
bx = x - wave1Cos * wave0Sin - pos0;
by = y + wave0Cos;
data[pixelIndex + 0] = getChannel(rx, ry, 0);
data[pixelIndex + 1] = getChannel(gx, gy, 1);
data[pixelIndex + 2] = getChannel(bx, by, 2);
}
}
}
var screenScale = 1;
function draw() {
patternContext.putImageData(glitchImageData, 0, 0);
pattern = ctx.createPattern(patternCanvas, 'repeat');
var w = window.innerWidth,
h = window.innerHeight;
// resizing the canvas also clears the context
if (w !== fsCanvas.width || h !== fsCanvas.height) {
screenScale = w / (Math.ceil(w / patternWidth) * patternWidth);
fsCanvas.width = w;
fsCanvas.height = h;
}
else {
ctx.clearRect(0, 0, w, h);
}
ctx.save();
ctx.scale(screenScale, screenScale);
ctx.fillStyle = pattern;
ctx.fillRect(0, 0, w * (1/screenScale), h * (1/screenScale));
ctx.restore();
}
function loop() {
update();
draw();
requestAnimationFrame(loop);
}
function getChannel(x, y, c) {
function wrap(v, min, max) {
return (((v - min) % (max - min)) + (max - min)) % (max - min) + min;
}
x = wrap(x, 0, patternWidth - 1) | 0;
y = wrap(y, 0, patternHeight - 1) | 0;
return pixels[y][x][c];
}
HTML5求自动在闪,HTML5 重复而不停闪烁的团状物相关推荐
- html5幻灯片 自动滑动,基于HTML5功能强大的滑块幻灯片
分享一款功能强大的HTML5滑块幻灯片.这是一款基于jQuery+HTML5实现的图片切换幻灯片代码.效果图如下: 实现的代码. html代码: Breaking Bad American crime ...
- beats x白灯一直闪_beatsx白灯不停闪烁怎么回事
beatsx白灯不停闪烁是很多小伙伴们在使用的时候遇到的问题,在遇到这个问题的时候不少小伙伴们不清楚怎么回事,想要知道解决办法的小伙伴们,就让小编给大家详细的讲讲吧. beatsx白灯不停闪烁怎么回事 ...
- 我的CSDN笔记总索引(阅读量降序,代码自动遍历生成HTML5源码)
Python代码用"命令容器"方法os.system(),调用Linux命令行工具crul获取CSDN博文页面源码,Python内置re正则解析出博文笔记信息,按阅读量降序模块输出 ...
- html5表单属性自动获得焦点,HTML5里autofocus属性
转载:http://www.webhek.com/html5-autofocus/ HTML5给我们带来了一大堆神奇的东西.以前需要用JavaScript和Flash完成的任务,例如表单校验,INPU ...
- discuz自动添加兼容html5标签的音乐播放器
关于在discuz中mp3附件自动添加Windows Media播放器插件的方法的文章网上有很多,只要修改./templates/default/discuzcode.htm文件就可以了,但是毕竟不是 ...
- html5交互效果,浅谈HTML5 CSS3的新交互特性
本文标题的这副图片,是用Phosotshop制作的.但是,在搜索引擎中你却无法搜索到它,搜索引擎还没有强大到能够识别图片里面的文字.并且由于图片的体积不算太小,可能网速慢的网友在浏览的时候不得不耐心的 ...
- html5通过api调数据库,使用HTML5数据库API [关闭](Using HTML5 Database API [closed])
使用HTML5数据库API [关闭](Using HTML5 Database API [closed]) 我正在开发一个使用phonegap/cordova 2.2的web应用程序,并希望将数据存储 ...
- HTML5新增视频标签(HTML5)
HTML5新增视频标签(HTML5) <!DOCTYPE html> <html lang="en"><head><meta charse ...
- html5脑图_使用HTML5技术绘制思维导图
客户常常提到思维导图,喜欢它的结构展示方式,和交互的友好,从图论的角度看,思维导图本质上是一种树,有一个根节点(主题)出发,联想到其他话题,于是分支开花,再分支,有时候也会构成网络结构,由子分支联想到 ...
- HTML5简明教程系列之HTML5 表格与表单(二)
HTML的第二弹也来了,最近高产似母猪,状态也不错,代码来源为实验课.本期主要内容为:HTML表格与DIV应用.HTML表单.上期基础部分的传送门: HTML5简明教程系列之HTML5基础(一)_Th ...
最新文章
- Docker的安装、镜像源更换与简单应用
- Go 学习笔记(56)— Go 第三方库 sqlx (操作数据库)
- Linux学习4之常用命令--文件搜索命令
- 一卡通变“一脸通” 人脸识别更新校园考勤方式
- YUI Grid CSS的优雅设计(转)
- 程序员面试金典 - 面试题 08.07. 无重复字符串的排列组合(回溯)
- pyqt安装_Win10下安装LabelImg以及使用(绝对是全网最简单的教程)
- KNN(一)--简单KNN原理及实现
- 利用HTML5开发Android笔记(中篇)
- oracle建表创建约束
- C64x+ CPU中断 .
- 连接宽带提示服务器无响应,宽带拨号上网服务器无响应是怎么回事
- 小觅双目+IMU联合标定
- python 232串口通信
- 你全记住了 ,你就是老中医
- Unity2017 经典游戏开发教程 算法分析与实现 (张帆 著)
- 《神经质人格》摘录(第十二章)
- 大屏可视化低代码开发平台网址
- oracle如何恢复表中删除的数据?
- fiddle android
热门文章
- 【优化调度】基于matlab一致性算法求解电力系统分布式经济调度优化问题【含Matlab源码 770期】
- mysql 主从_mysql主从复制异常中断分析处理
- 图片超大 html,解决WebView加载html文本时,图片太大不能适配屏幕
- ubuntu 设置静态路由_Linux route 配置静态路由(转载)
- 最大连续子数组和 动态规划_53. 最大子序和(动态规划)
- java path combine_Path.Combine (合并两个路径字符串)方法的一些使用细节
- ubuntu终端命令停止_解决Linux关闭终端(关闭SSH等)后运行的程序或者服务自动停止【后台运行程序】...
- 土木工程与计算机专业考研学校排名,2017年土木工程专业考研大学排名
- sqlmap自动扫描注入点_SQLMAP使用指南[学员作品]
- 实现Servlet接口来开发Servlet程序