笔者根据之前看到的教程,提供两种不同的指针样式的修改方法。
样式 1 Step 1 在主题文件夹下的 css 文件夹中创建 cursor.css
1 2 3 4 5 6 7 8 9 body { cursor : url (https://gcore.jsdelivr.net/gh/sviptzk/HexoStaticFile@latest/Hexo/img/default.cur ), default; } a ,img { cursor : url (https://gcore.jsdelivr.net/gh/sviptzk/HexoStaticFile@latest/Hexo/img/pointer.cur ), default; }
Step 2 在 _config.butterfly.yml 配置文件中找到 inject
1 2 3 inject: head: - <link rel="stylesheet" href="/css/cursor.css">
Step 3 1 2 3 4 hexo clean hexo g hexo d hexo s
样式 2 Step 1 在主题文件夹下的 css 文件夹中创建 cursor.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 #cursor { position : fixed; width : 16px ; height : 16px ; background : #000 ; border-radius : 8px ; opacity : 0.25 ; 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 ); } #cursor .active { opacity : 0.5 ; transform : scale (0.5 ); }
Step 2 在主题文件夹下的 js 文件夹中创建 cursor.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 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='.5'/></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 (); })();
Step 3 在 _config.butterfly.yml 配置文件中找到 inject
1 2 3 4 5 inject: head: - <link rel="stylesheet" href="/css/cursor.css"> bottom: - <script src="/js/cursor.js"></script>
Step 4 1 2 3 4 hexo clean hexo g hexo d hexo s