婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 使用 HTML5 Canvas 制作水波紋效果點擊圖片就會觸發

使用 HTML5 Canvas 制作水波紋效果點擊圖片就會觸發

熱門標簽:邢臺縣地圖標注app 申請400電話流程簡介 外呼系統電話怎么投訴 阜陽企業外呼系統 南通數據外呼系統推廣 外呼線穩定線路 pageadm實現地圖標注 地圖標注位置能賺錢嗎 呼和浩特外呼電銷系統排名

今天,我們繼續分享 JavaScript 實現的效果例子,這篇文章會介紹使用 JavaScript 實現水波紋效果。水波效果以圖片為背景,點擊圖片任意位置都會觸發。有時候,我們使用普通的 Javascript 就可以創建一個很有趣的解決功能。
 

源碼下載

Step 1. HTML

和以前一樣,首先是 HTML 代碼:

復制代碼
代碼如下:

<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8 />
<title>Water drops effect</title>
<link rel="stylesheet" href="css/main.css" type="text/css" />
<script src="js/vector2d.js" type="text/javascript" charset="utf-8"></script>
<script src="js/waterfall.js" type="text/javascript" charset="utf-8"></script>
</head>
<body>
<div class="example">
<h3><a href="#">Water drops effect</a></h3>
<canvas id="water">HTML5 compliant browser required</canvas>
<div id="switcher">
<img onclick='watereff.changePicture(this.src);' src="data_images/underwater1.jpg" />
<img onclick='watereff.changePicture(this.src);' src="data_images/underwater2.jpg" />
</div>
<div id="fps"></div>
</div>
</body>
</html> 

Step 2. CSS

這是用到的 CSS 代碼:

復制代碼
代碼如下:

body{background:#eee;margin:0;padding:0}
.example{background:#FFF;width:600px;border:1px #000 solid;margin:20px auto;padding:15px;-moz-border-radius: 3px;-webkit-border-radius: 3px}
#water {
width:500px;
height:400px;
display: block;
margin:0px auto;
cursor:pointer;
}
#switcher {
text-align:center;
overflow:hidden;
margin:15px;
}
#switcher img {
width:160px;
height:120px;
}

Step 3. JS

下面是主要的 JavaScript 代碼:

復制代碼
代碼如下:

function drop(x, y, damping, shading, refraction, ctx, screenWidth, screenHeight){
this.x = x;
this.y = y;
this.shading = shading;
this.refraction = refraction;
this.bufferSize = this.x * this.y;
this.damping = damping;
this.background = ctx.getImageData(0, 0, screenWidth, screenHeight).data;
this.imageData = ctx.getImageData(0, 0, screenWidth, screenHeight);
this.buffer1 = [];
this.buffer2 = [];
for (var i = 0; i < this.bufferSize; i++){
this.buffer1.push(0);
this.buffer2.push(0);
}
this.update = function(){
for (var i = this.x + 1, x = 1; i < this.bufferSize - this.x; i++, x++){
if ((x < this.x)){
this.buffer2[i] = ((this.buffer1[i - 1] + this.buffer1[i + 1] + this.buffer1[i - this.x] + this.buffer1[i + this.x]) / 2) - this.buffer2[i];
this.buffer2[i] *= this.damping;
} else x = 0;
}
var temp = this.buffer1;
this.buffer1 = this.buffer2;
this.buffer2 = temp;
}
this.draw = function(ctx){
var imageDataArray = this.imageData.data;
for (var i = this.x + 1, index = (this.x + 1) * 4; i < this.bufferSize - (1 + this.x); i++, index += 4){
var xOffset = ~~(this.buffer1[i - 1] - this.buffer1[i + 1]);
var yOffset = ~~(this.buffer1[i - this.x] - this.buffer1[i + this.x]);
var shade = xOffset * this.shading;
var texture = index + (xOffset * this.refraction + yOffset * this.refraction * this.x) * 4;
imageDataArray[index] = this.background[texture] + shade;
imageDataArray[index + 1] = this.background[texture + 1] + shade;
imageDataArray[index + 2] = 50 + this.background[texture + 2] + shade;
}
ctx.putImageData(this.imageData, 0, 0);
}
}
var fps = 0;
var watereff = {
// variables
timeStep : 20,
refractions : 2,
shading : 3,
damping : 0.99,
screenWidth : 500,
screenHeight : 400,
pond : null,
textureImg : null,
interval : null,
backgroundURL : 'data_images/underwater1.jpg',
// initialization
init : function() {
var canvas = document.getElementById('water');
if (canvas.getContext){
// fps countrt
fps = 0;
setInterval(function() {
document.getElementById('fps').innerHTML = fps / 2 + ' FPS';
fps = 0;
}, 2000);
canvas.onmousedown = function(e) {
var mouse = watereff.getMousePosition(e).sub(new vector2d(canvas.offsetLeft, canvas.offsetTop));
watereff.pond.buffer1[mouse.y * watereff.pond.x + mouse.x ] += 200;
}
canvas.onmouseup = function(e) {
canvas.onmousemove = null;
}
canvas.width = this.screenWidth;
canvas.height = this.screenHeight;
this.textureImg = new Image(256, 256);
this.textureImg.src = this.backgroundURL;
canvas.getContext('2d').drawImage(this.textureImg, 0, 0);
this.pond = new drop(
this.screenWidth,
this.screenHeight,
this.damping,
this.shading,
this.refractions,
canvas.getContext('2d'),
this.screenWidth, this.screenHeight
);
if (this.interval != null){
clearInterval(this.interval);
}
this.interval = setInterval(watereff.run, this.timeStep);
}
},
// change image func
changePicture : function(url){
this.backgroundURL = url;
this.init();
},
// get mouse position func
getMousePosition : function(e){
if (!e){
var e = window.event;
}
if (e.pageX || e.pageY){
return new vector2d(e.pageX, e.pageY);
} else if (e.clientX || e.clientY){
return new vector2d(e.clientX, e.clientY);
}
},
// loop drawing
run : function(){
var ctx = document.getElementById('water').getContext('2d');
watereff.pond.update();
watereff.pond.draw(ctx);
fps++;
}
}
window.onload = function(){
watereff.init();
}

正如你所看到的,這里使用 Vector2D 函數,這個函數在 vector2d.js 里提供了。另一個很難的方法是使用純數學實現,感興趣的可以自己實驗一下。

標簽:鶴崗 德州 辛集 黃山 撫順 楊凌 蚌埠 內蒙古

巨人網絡通訊聲明:本文標題《使用 HTML5 Canvas 制作水波紋效果點擊圖片就會觸發》,本文關鍵詞  使用,HTML5,Canvas,制作,水,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《使用 HTML5 Canvas 制作水波紋效果點擊圖片就會觸發》相關的同類信息!
  • 本頁收集關于使用 HTML5 Canvas 制作水波紋效果點擊圖片就會觸發的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    综合久久一区二区三区| 欧美视频中文字幕| 久久99精品国产.久久久久| 亚洲成人免费观看| 午夜激情一区二区三区| 亚洲第一搞黄网站| 天堂成人国产精品一区| 亚洲在线中文字幕| 一区二区三区电影在线播| 欧美日韩不卡一区二区| 日韩一区二区精品| 777午夜精品免费视频| 欧美日韩在线观看一区二区 | 欧美成人精品二区三区99精品| 91成人在线免费观看| av中文一区二区三区| 成人午夜免费av| 成人小视频免费观看| 大胆欧美人体老妇| 成人三级在线视频| 成人avav在线| 99麻豆久久久国产精品免费优播| 丰满岳乱妇一区二区三区| 成人av集中营| 91视频观看视频| 色狠狠一区二区| 欧美视频一区二| 精品国产一区二区亚洲人成毛片| 精品久久久久久久久久久久久久久久久 | 亚欧色一区w666天堂| 国产精品视频在线看| 亚洲视频免费看| 亚洲国产精品一区二区久久| 男女男精品网站| 成人午夜私人影院| 一本久久综合亚洲鲁鲁五月天 | 欧美一区二区视频免费观看| 欧美一区二区三区思思人| 欧美日韩国产首页| 欧美人妖巨大在线| 精品电影一区二区| 亚洲精品视频免费看| 日韩精品亚洲专区| 国产精品 欧美精品| 波多野结衣在线aⅴ中文字幕不卡| jizzjizzjizz欧美| 欧美一级午夜免费电影| 久久精品一区八戒影视| 亚洲老妇xxxxxx| 国产乱码精品1区2区3区| 91丝袜高跟美女视频| 欧美videofree性高清杂交| 国产精品乱码人人做人人爱| 天堂一区二区在线| 成人精品视频一区二区三区| 欧美三级日韩三级| 欧美激情资源网| 日本欧美一区二区| 色婷婷精品大在线视频| 久久综合色8888| 午夜视频在线观看一区二区| 成人美女在线观看| 久久综合久色欧美综合狠狠| 亚洲大片在线观看| 91视频观看视频| 日本一区二区三区四区| 麻豆精品视频在线观看视频| 91丨porny丨在线| 中文字幕乱码久久午夜不卡| 另类小说视频一区二区| 欧美日韩久久不卡| 一区二区三区四区不卡视频| 国产成人丝袜美腿| 精品国产伦一区二区三区观看体验 | 极品少妇一区二区三区精品视频| 欧美三日本三级三级在线播放| 久久精品视频一区| 精品亚洲成a人| 日韩美女视频一区二区在线观看| 亚洲国产精品一区二区久久 | 日本v片在线高清不卡在线观看| heyzo一本久久综合| 久久精品视频免费观看| 狠狠色丁香久久婷婷综合_中| 欧美日本不卡视频| 亚洲高清三级视频| 欧美色网站导航| 亚洲成a人片在线不卡一二三区 | 一本大道久久a久久综合婷婷 | 老司机一区二区| 欧美精品乱码久久久久久按摩 | 亚洲成人资源网| 在线视频国内一区二区| 亚洲在线一区二区三区| 欧美综合亚洲图片综合区| 五月婷婷激情综合| 欧美一区二区三区婷婷月色| 日韩成人一级大片| 亚洲精品一区二区三区香蕉| 国产一区二区精品在线观看| 久久久不卡影院| 色哟哟欧美精品| 日本在线不卡一区| 欧美大片一区二区| 成人福利视频网站| 亚洲精品欧美激情| 欧美精选午夜久久久乱码6080| 免费成人结看片| 久久久精品影视| 色婷婷综合中文久久一本| 视频在线观看91| 国产亚洲欧美日韩在线一区| 91视频免费看| 免费xxxx性欧美18vr| 2023国产精品自拍| 色婷婷一区二区三区四区| 蜜臀精品一区二区三区在线观看 | 国产成人精品免费网站| 亚洲免费在线播放| 欧美va天堂va视频va在线| 成人网页在线观看| 日韩av不卡在线观看| 国产色产综合产在线视频| 91福利在线观看| 国产乱码字幕精品高清av | 国产在线一区二区| 亚洲欧美在线视频| 欧美精品一区二区在线播放| 99精品久久99久久久久| 另类小说视频一区二区| 亚洲美女视频一区| 欧美电影精品一区二区| 欧美亚洲综合久久| 成人av网址在线| 国产专区综合网| 日韩精品欧美成人高清一区二区| 久久综合狠狠综合久久综合88| 欧洲av一区二区嗯嗯嗯啊| 国产精品99久久久久久宅男| 日韩在线播放一区二区| 国产精品不卡在线| 久久综合色天天久久综合图片| 欧美肥大bbwbbw高潮| 97se亚洲国产综合自在线观| 国产麻豆精品95视频| 美国十次综合导航| 三级成人在线视频| 亚洲五码中文字幕| 亚洲精品精品亚洲| 亚洲欧美日韩在线| 国产精品不卡在线| 欧美高清在线一区二区| 国产亚洲制服色| 久久精品日产第一区二区三区高清版 | 极品少妇xxxx偷拍精品少妇| 日韩精品欧美成人高清一区二区| 亚洲欧美另类久久久精品| 国产精品久久影院| 国产精品女人毛片| 日韩一级在线观看| 4438成人网| 欧美日韩一区国产| 欧美亚洲高清一区二区三区不卡| 福利电影一区二区| 丁香婷婷综合色啪| 国产精品亚洲午夜一区二区三区| 青青草97国产精品免费观看| 中文字幕字幕中文在线中不卡视频| 国产偷国产偷精品高清尤物| 久久久精品综合| 精品国产免费一区二区三区香蕉| 欧美三级欧美一级| 欧美一级高清大全免费观看| 日韩三级伦理片妻子的秘密按摩| 欧美大肚乱孕交hd孕妇| 久久综合99re88久久爱| 国产精品美女久久久久久| 亚洲日穴在线视频| 亚洲午夜久久久| 美腿丝袜一区二区三区| 久久疯狂做爰流白浆xx| 国产超碰在线一区| 欧美专区在线观看一区| 7777精品伊人久久久大香线蕉经典版下载 | 亚洲福利电影网| 国产精品伊人色| 6080日韩午夜伦伦午夜伦| 欧美国产日本韩| 日本少妇一区二区| 在线中文字幕一区二区| 国产清纯美女被跳蛋高潮一区二区久久w | 欧美国产禁国产网站cc| 日韩精品亚洲专区| 99视频在线观看一区三区| 精品美女一区二区| 婷婷久久综合九色综合绿巨人 | 成人欧美一区二区三区视频网页| 看片的网站亚洲| 欧美年轻男男videosbes| 亚洲精品视频免费观看|