javascript水波紋特效是一個非常實用的前端效果,可以實現點擊時出現的類似水波紋的效果,讓整個頁面看起來更加生動、動態。下面我們就來一起看看javascript水波紋特效的使用方法和實現原理。
首先,我們需要引入一個庫文件——ripples.js,這是一個非常好用的javascript水波紋特效庫,可以使我們的代碼變得更加簡單易用。下面是一段使用ripples.js實現水波紋特效的代碼:
$('body').ripples({ resolution: 512, dropRadius: 20, perturbance: 0.04, });在這段代碼中,我們首先選擇了我們要添加水波紋效果的頁面元素,這里我選擇的是body,你可以根據自己的需求自行去選擇。接著,我們調用ripples.js library,傳入一些參數——resolution、dropRadius和perturbance。其中, resolution表示水波的分辨率,值越大,水波的紋路就會越密集; dropRadius表示水滴半徑,即初始生成水波的半徑大小; perturbance表示水波的波動幅度,值越大,波動越明顯。 使用這個庫之前需要注意,確保你已經引入jquery和ripples.js兩個庫。另外,使用這個庫的效果在IE系列瀏覽器中可能會出現異常,建議使用時測試一下。 如果你想把水波紋效果添加到自己的一些元素中去,可以使用如下代碼:
$(document).ready(function() { $('button').ripples({ resolution: 256, dropRadius: 20, perturbance:0.03, interactive:true }); });這里我們把水波紋效果添加到某一個button元素上,通過給button添加class或者id,也可以添加到其他的元素上。 javascript水波紋特效的實現原理其實非常簡單,就是通過canvas元素和一些計算來實現的。下面是簡單的canvas繪制水波的代碼:
window.requestAnimFrame = (function() { return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || function(callback) { window.setTimeout(callback, 1000 / 60); }; })(); canvas.width = window.innerWidth; canvas.height = window.innerHeight; canvas.addEventListener('mousedown', function(e) { ripple(e.clientX, e.clientY); }); function ripple(x, y) { waves.push(new Wave(x, y)); } animate(); function animate() { ctx.clearRect(0, 0, canvas.width, canvas.height); for (var i = 0; i< waves.length; i++) { waves[i].draw(); } requestAnimFrame(animate); } function Wave(x, y) { this.x = x; this.y = y; this.radius = 1; this.maxRadius = Math.sqrt(Math.pow(canvas.width, 2) + Math.pow(canvas.height, 2)); } Wave.prototype.draw = function() { var index = waves.indexOf(this); if (index >-1) { waves.splice(index, 1); } this.radius += 2; if (this.radius >= this.maxRadius) { return; } ctx.beginPath(); ctx.arc(this.x, this.y, this.radius, 0, 2 * Math.PI, false); ctx.lineWidth = 3; ctx.strokeStyle = 'rgba(255, 255, 255,' + (1 - (this.radius / this.maxRadius)) + ')'; ctx.stroke(); };這段代碼中,我們首先定義了一個window.requestAnimFrame()方法,用于不斷地更新canvas畫布。接著,我們初始化了canvas的大小,并為其添加了鼠標點擊事件,當鼠標點擊時,就會有水波紋出現。然后定義了一個animate()方法,用于清除canvas畫布并重繪每一幀;定義了一個Wave()方法,用于生成水波紋并在畫布中繪制;最后在animate()方法中循環繪制所有水波紋。 通過以上代碼,我們可以發現實現水波特效其實是非常簡單的,只需要了解一些基礎的canvas繪圖知識和一些數學知識,就能夠高效地實現這個效果。