輕戳這裏查看粒子和軌跡效果。react
粒子動畫使用了著名的 particles庫,至於鼠標軌跡則是借鑑了這裏的效果。到此爲止想寫一篇總結來記錄下使用這些工具的心得。關於這個粒子庫,其實已經十分紅熟了,以致於 jQuery 中也有其衍生的插件。這裏照着配置寫就是了。由於個人網站基於 react 因此使用 particle 須要用 react 的方式,以下:git
import React from "react";
import Particles from "react-particles-js";
import propsP from "./particleProps";
import WordCard from "./utility/wordCard";
import MouseTrail from "./utility/MouseTrail";
export default class Home extends React.Component {
render() {
console.log(words);
return (
<div> <MouseTrail /> <Particles style={{ position: "fixed", zIndex: -1 }} params={propsP} /> </div> ) } } 複製代碼
接下來談談在實現鼠標手勢的時候,應用的一些有趣的東西。它們是:github
以上幾個知識點比較零碎,咱們仍是經過整理一份實現鼠標軌跡的 todolist,來逐步介紹。canvas
關於最終實現,源碼在這裏。鼠標軌跡的場景十分簡單:當鼠標在頁面中劃過期留下一串軌跡,而後逐漸消失。那麼咱們須要有如下工做準備:工具
document.body.clientHeight < window.innerHeight ? window.innerHeight : document.body.clientHeight,
複製代碼
mousemove
事件,在鼠標移動的時候,繪製相應位置的點,由變化的點組成軌跡。由於使用 canvas
繪製點位,須要用到相應 API,好比:getContext
。這時候咱們的 React.createRef()
,就能夠大顯身手了。關於它的使用注意,react 官方文檔有詳細說明,再也不贅述。matchMedia
。我仍是初次認識這個東西,其實它能夠理解爲對 @media
進行的 get 操做。只是在咱們的例子中,只須要獲取 pointer: fine
的信息就足夠了。requestAnimationFrame(animatePoints);
// setInterval(animatePoints, 1000/60)
複製代碼
關於 requestAnimationFrame 替代 setInterval 或 setTimeout 的優點以及做用,已經有不少文章能夠參考,相信咱們看的異曲同工。關於鼠標軌跡的 todoList 差很少是這些,具體實現起來,仍是有一些細節須要注意,好比在拖拽時會產生大量的 point 繪製,如何及時有效地清空,能夠在每次渲染給每一個 point 添加增長生命時間,當最早繪製的點的生命時間超過咱們定義的週期時,就從繪製隊列裏剔除。至於繪製圖形的細節,這個就看我的喜愛了。動畫
參考資料:網站