写的很详细,看上去很麻烦,其实用起来很简单。以在butterfly主题应用为例介绍预览效果可参看本站
点击查看效果
1、创建mouse.css 在Blogroot/source/css下创建mouse.css,粘贴以下代码,其中可自定义部分已标出。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 #cursor { position : fixed; width : 16px ; height : 16px ; background : rgb (148 , 243 , 213 ); border-radius : 8px ; opacity : .7 ; z-index : 10086 ; pointer-events : none; transition : 0.2s ease-in-out; transition-property : background, opacity, transform; } #cursor .hidden { opacity : 0 ; } #cursor .hover { opacity : 0.1 ; transform : scale (2.5 ); -webkit-transform : scale (2.5 ); -moz-transform : scale (2.5 ); -ms-transform : scale (2.5 ); -o-transform : scale (2.5 ); } #cursor .active { opacity : 0.5 ; transform : scale (0.5 ); -webkit-transform : scale (0.5 ); -moz-transform : scale (0.5 ); -ms-transform : scale (0.5 ); -o-transform : scale (0.5 ); }
2、创建mouse.js 在Blogroot/source/js下创建mouse.js,粘贴以下代码,其中可自定义部分已标出。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 var CURSOR ;Math .lerp = (a, b, n ) => (1 - n) * a + n * b;const getStyle = (el, attr ) => { try { return window .getComputedStyle ? window .getComputedStyle (el)[attr] : el.currentStyle [attr]; } catch (e) {} return "" ; }; class Cursor { constructor ( ) { this .pos = {curr : null , prev : null }; this .pt = []; this .create (); this .init (); this .render (); } move (left, top ) { this .cursor .style ["left" ] = `${left} px` ; this .cursor .style ["top" ] = `${top} px` ; } create ( ) { if (!this .cursor ) { this .cursor = document .createElement ("div" ); this .cursor .id = "cursor" ; this .cursor .classList .add ("hidden" ); document .body .append (this .cursor ); } var el = document .getElementsByTagName ('*' ); for (let i = 0 ; i < el.length ; i++) if (getStyle (el[i], "cursor" ) == "pointer" ) this .pt .push (el[i].outerHTML ); document .body .appendChild ((this .scr = document .createElement ("style" ))); this .scr .innerHTML = `* {cursor: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8' width='8px' height='8px'><circle cx='4' cy='4' r='4' opacity='.8' fill='rgb(148, 243, 213)'/></svg>") 4 4, auto}` ; } refresh ( ) { this .scr .remove (); this .cursor .classList .remove ("hover" ); this .cursor .classList .remove ("active" ); this .pos = {curr : null , prev : null }; this .pt = []; this .create (); this .init (); this .render (); } init ( ) { document .onmouseover = e => this .pt .includes (e.target .outerHTML ) && this .cursor .classList .add ("hover" ); document .onmouseout = e => this .pt .includes (e.target .outerHTML ) && this .cursor .classList .remove ("hover" ); document .onmousemove = e => {(this .pos .curr == null ) && this .move (e.clientX - 8 , e.clientY - 8 ); this .pos .curr = {x : e.clientX - 8 , y : e.clientY - 8 }; this .cursor .classList .remove ("hidden" );}; document .onmouseenter = e => this .cursor .classList .remove ("hidden" ); document .onmouseleave = e => this .cursor .classList .add ("hidden" ); document .onmousedown = e => this .cursor .classList .add ("active" ); document .onmouseup = e => this .cursor .classList .remove ("active" ); } render ( ) { if (this .pos .prev ) { this .pos .prev .x = Math .lerp (this .pos .prev .x , this .pos .curr .x , 0.15 ); this .pos .prev .y = Math .lerp (this .pos .prev .y , this .pos .curr .y , 0.15 ); this .move (this .pos .prev .x , this .pos .prev .y ); } else { this .pos .prev = this .pos .curr ; } requestAnimationFrame (() => this .render ()); } } (() => { CURSOR = new Cursor (); })();
3、引用这两个文件 在_config.butterfly.yml中inject项引用这两个文件
1 2 3 4 5 inject: head: - <link rel="stylesheet" href="/css/mouse.css"> bottom: - <script src="/js/mouse.js"></script>
到这里你就可以得到一个乖巧的鼠标指针了!👻