使用javascript生成的植物显示过程特效
查看效果:http://keleyi.com/keleyi/phtml/html5/33.htm
.NET版本:http://keleyi.com/a/bjac/66mql4bc.htm
完整HTML文件代码:
- <!DOCTYPE html>
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <title>使用javascript生成的植物显示过程特效 - 柯乐义</title><base target="_blank" />
- <style>html, body {background: black;}a{color:white;text-decoration:none}
- .hovertreefrme{height:700px;width:760px;border:solid 1px red; }
- </style>
- </head>
- <body>
- <div class="hovertreefrme"><div><a href="http://keleyi.com">首页</a> <a href="http://keleyi.com/a/bjae/4d3jagcj.htm">原文</a> <a href="http://keleyi.com/keleyi/phtml/">特效库</a> <a href="http://hovertree.com">HoverTree</a> <a href="http://keleyi.com/a/bjac/66mql4bc.htm">参考</a></div>
- <canvas id="hovertree"></canvas>
- </div>
- <script>
- (function () {
- var H, W, animationCurve, keleyicanvas, colorStops, getColors, i, k, lut, maxDraws, numDraws, pMax, rand, render, row, speed, step, styles, transformations, v, xRange, xSpan, yRange, ySpan, _i, _len, _ref;
- speed = 1;
- W = 350;
- H = 500;
- transformations = [
- [
- (function (x, y) {
- return 0;
- }), (function (x, y) {
- return 0.16 * y;
- }), 1
- ], [
- (function (x, y) {
- return 0.2 * x - 0.26 * y;
- }), (function (x, y) {
- return 0.23 * x + 0.22 * y + 1.6;
- }), 7
- ], [
- (function (x, y) {
- return -0.15 * x + 0.28 * y;
- }), (function (x, y) {
- return 0.26 * x + 0.24 * y + 0.44;
- }), 7
- ], [
- (function (x, y) {
- return 0.85 * x + 0.04 * y;
- }), (function (x, y) {
- return -0.04 * x + 0.85 * y + 1.6;
- }), 85
- ]
- ];
- maxDraws = 200000;
- xRange = [-2.182, 2.6558];
- yRange = [0, 9.9983];
- keleyicanvas = document.getElementById("hover"+"tree");
- keleyicanvas.width = W;
- keleyicanvas.height = H;
- styles = {
- position: "absolute",
- top: "400px",
- left: "300px",
- margin: "-" + (~~(H / 2)) + "px 0 0 -" + (~~(W / 2)) + "px"
- };
- colorStops = [[0, "rgba(255,255,255,1)"], [1000, "rgba(253,253,52,0.6)"], [5000, "rgba(0,171,56,0.7)"], [10000, "rgba(168,210,110,0.7)"], [20000, "rgba(246,243,27,0.6)"], [40000, "rgba(138,215,39,0.7)"], [65000, "rgba(243,205,8,0.5)"], [90000, "rgba(150,204,104,0.4)"], [125000, "rgba(137,230,101,0.5)"], [150000, "rgba(246,243,27,0.5)"], [190000, "rgba(255,255,255,0.8)"]];
- animationCurve = function (frame) {
- if (frame < 1000) return 25;
- if (frame < 5000) return 50;
- if (frame < 10000) return 75;
- if (frame < 20000) return 100;
- if (frame < 40000) return 150;
- if (frame < 65000) return 250;
- if (frame < 90000) return 400;
- if (frame < 150000) return 600;
- if (frame < 190000) return 400;
- if (frame < 200000) return 100;
- };
- lut = {};
- numDraws = 0;
- pMax = 0;
- for (_i = 0, _len = transformations.length; _i < _len; _i++) {
- row = transformations[_i];
- for (i = pMax, _ref = row[2] + pMax - 1; pMax <= _ref ? i <= _ref : i >= _ref; pMax <= _ref ? i++ : i--) {
- lut[i] = [row[0], row[1]];
- }
- pMax += row[2];
- }
- getColors = function () {
- var colors;
- colors = colorStops.slice();
- return function () {
- var colorStop;
- if (!(colors[0] && numDraws >= colors[0][0])) return;
- colorStop = colors.shift();
- return ctx.fillStyle = colorStop[1];
- };
- };
- for (k in styles) {
- v = styles[k];
- keleyicanvas.style[k] = v;
- }
- window.ctx = keleyicanvas.getContext("2d");
- xSpan = xRange[1] - xRange[0];
- ySpan = yRange[1] - yRange[0];
- window.updateColor = getColors();
- render = function () {
- var drawsPerFrame, f, i, iter, x, y, _ref2, _ref3;
- if (numDraws > maxDraws) return;
- updateColor();
- drawsPerFrame = speed * animationCurve(numDraws);
- for (i = 0; 0 <= drawsPerFrame ? i <= drawsPerFrame : i >= drawsPerFrame; 0 <= drawsPerFrame ? i++ : i--) {
- iter = 0;
- _ref2 = [rand(xRange[0], xRange[1]), rand(yRange[0], yRange[1])], x = _ref2[0], y = _ref2[1];
- while (iter++ < 50) {
- f = lut[~~rand(0, pMax)];
- _ref3 = [f[0](x, y), f[1](x, y)], x = _ref3[0], y = _ref3[1];
- }
- x = W * (x - xRange[0]) / xSpan;
- y = H * (1 - y / ySpan);
- ctx.fillRect(x, y, 1, 1);
- }
- return numDraws += drawsPerFrame;
- };
- window.onclick = function () {
- numDraws = 0;
- window.updateColor = getColors();
- return ctx.clearRect(0, 0, W, H);
- };
- rand = function (a, b) {
- return (b - a) * Math.random() + a;
- };
- window.requestAnimationFrame || (window.requestAnimationFrame = (function () {
- var prefix, r, _j, _len2, _ref2;
- _ref2 = ['webkit', 'moz', 'ms', 'o'];
- for (_j = 0, _len2 = _ref2.length; _j < _len2; _j++) {
- prefix = _ref2[_j];
- if (r = window["" + prefix + "RequestAnimationFrame"]) return r;
- }
- return function (callback) {
- return window.setTimeout(callback, 1000 / 60);
- };
- })());
- (step = function () {
- return requestAnimationFrame(step) && render();
- })();
- }).call(this);
- </script>
- </body>
- </html>
web前端汇总 : http://www.cnblogs.com/jihua/p/webfront.html
使用javascript生成的植物显示过程特效的更多相关文章
- JavaScript + CSS3 实现的海报画廊特效
原文:JavaScript + CSS3 实现的海报画廊特效 这是慕课网上<CSS3+JS 实现超炫的散列画廊特效>的源代码,我修改了一些 bug 和调优了一些细节,并把学习过程中并不了解 ...
- javascript生成表格增删改查 JavaScript动态改变表格单元格内容 动态生成表格 JS获取表格任意单元格 javascript如何动态删除表格某一行
jsp页面表格布局Html代码 <body onload="show()"> <center> <input type="text" ...
- 【原创】网站抓包HttpWebRequest不返回Javascript生成的Cookie的解决办法
前言: 最近在做中国移动爬虫的过程中,首先遇到的就是 在某个请求中,有一个名为“WT_PFC"的cookie键值是由前端JavaScript生成的,没有进入到HttpWebResponse中 ...
- javascript生成自定义的arcgis simpletoolbar
javascript生成自定义的arcgis simpletoolbar 最近在学习ARCGIS for Javascript过程中,在ESRI的在线帮助上看见了这样一个示例,查看源码后,觉得左侧工具 ...
- 使用JavaScript生成二维码教程-附qrcodejs中文文档
使用javascript生成二维码 依赖jquery 需要使用到的库 https://github.com/davidshimjs/qrcodejs DIV <div id="qrco ...
- 浅谈移动端 View 的显示过程
作者:个推安卓开发工程师 一七 随着科技的发展,各种移动端早已成为人们日常生活中不可或缺的部分,人们使用移动端产品工作.社交.娱乐……移动端界面的流畅性已经成为影响用户体验的重要因素之一.那么你是否思 ...
- JQuery实现密码有短暂的显示过程和实现 input hint效果
目录: 一.实现目的 二.问题思考 三.解决办法 1.输入用户名 2.输入密码短暂显示 一.实现目的 这几天做项目的时候,客户要求在文本框输入密码的时候,要求密码有短暂的显示过程,如下图: 二.问题思 ...
- 第一百八十七节,jQuery,知问前端--cookie 插件,注册成功后生成cookie,显示登录状态
jQuery,知问前端--cookie 插件 学习要点: 1.使用 cookie 插件 2.注册直接登录 Cookie 是网站用来在客户端保存识别用户的一种小文件.一般来用库可以保存用户登 录信息.购 ...
- 修改u-boot的开机logo及显示过程【转】
本文转载自;http://blog.csdn.net/voice_shen/article/details/6789424 [ u-boot: Git://git.denx.de/u-boot.git ...
随机推荐
- python发送邮件及附件
今天给大伙说说python发送邮件,官方的多余的话自己去百度好了,还有一大堆文档说实话不到万不得已的时候一般人都不会去看,回归主题: 本人是mac如果没有按照依赖模块的请按照下面的截图安装 导入模块如 ...
- 【Win10 应用开发】扫描和连接Wi-fi网络
老周今天带大家去“扫雷”了,别当真,是扫描并连接指定无线网络,时尚一点叫Wi-fi. 所以,今天的任务要求你的设备至少有1张无线网卡,目前老周没看到过有N张无线网卡的设备.像笔记本.平板等设备都可以, ...
- zyUpload+struct2完成文件上传
前言: 最近在写自己的博客网站,算是强化一下自己对s2sh框架的理解.期间遇到了很多问题,这些问题在写之前都考虑过,感觉也就是那样吧.但正真遇到了,也挺让人难受的.就利用zyUpload这个js插件实 ...
- PHP中有关正则表达式的函数集锦
之前学正则表达式的目的是想从网上抓取点小说啊,文档啊,还有获取相应的视频连接然后批量下载.当时初学PHP根本不知道PHP有专门抓包的工具,就像Simple_html_dom.php(在我的其他博文中有 ...
- 【转】 个人认为,这是最详细的 android------HttpURLConnection 类用法详解。一些教材没讲到的,它讲到了
站在巨人的肩膀上,渐渐进步. 原文链接:http://www.blogjava.net/supercrsky/articles/247449.html 针对JDK中的URLConnection连接Se ...
- 如何为RD网关创建自建签名的证书
创建安全的RD网关是一件非常好的事情,这样可以在公网环境下直接远程接入内部的已开启远程访问的主机服务器. 建立这个安全的RD网关需要的材料有RD网关本身,以及一个证书.由于一般情况下这些在RD网关后面 ...
- 使用RMAN创建复制数据库
我的实验环境: - 源数据库A机: RHEL6.4 + Oracle 11.2.0.4 IP地址:192.168.99.159 db_name=oradb 数据库已正常运行 - 复制数据库B机: RH ...
- 第三方侧滑菜单SlidingMenu在android studio中的使用
南尘:每天进步一点点! 前面讲了官方的侧滑菜单DrawerLayout的使用,其实早在官方没有推出这个之前,就有很多第三方的jar包如SlidingMenu等,感谢开源的力量. SlidingMenu ...
- 无法将类型为“Microsoft.Office.Interop.Word.ApplicationClass”的 COM 对象强制转换为接口类型“Microsoft.Office.Interop.Word._Application”。
无法将类型为“Microsoft.Office.Interop.Word.ApplicationClass”的 COM 对象强制转换为接口类型“Microsoft.Office.Interop.Wor ...
- 机器学习 1 linear regression 作业(二)
这个线性回归的作业需要上传到https://inclass.kaggle.com/c/ml2016-pm2-5-prediction 上面,这是一个kaggle比赛的网站.第一次接触听说这个东西,恰好 ...