效果预览

查看图片

image-20240810185053889

新建js和css文件

点击查看
  1. 新建文件[BlogRoot]\source\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
    80
    81
    82
    83
    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")));
    // 这里改变鼠标指针的颜色 由svg生成(颜色为鲜绿色)
    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' fill='rgb(0,255,0)' opacity='.7'/></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();
    // 需要重新获取列表时,使用 CURSOR.refresh()
    })();
  2. [BlogRoot]\source\css\custom.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
/* 鼠标样式 */
#cursor {
position: fixed;
width: 16px;
height: 16px;
background: rgb(0, 255, 0); /* 设置为鲜绿色 */
border-radius: 50%; /* 圆形 */
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); /* 调整缩放比例 */
}

配置文件引用

修改配置文件

在主题配置文件_config.butterfly.yml文件的inject配置项引入刚刚创建的css文件和js文件:

1
2
3
4
5
inject: 
head:
- <link rel="stylesheet" href="/css/custom.css">
bottom:
- <script defer src="/js/cursor.js"></script>

最后执行三连即可看到效果.

1
hexo cl,hexo g,hexo s

配色推荐

主要修改js文件中的fillcss文件中的background 参数

1.青色配色方案(推荐)

cursor.js 更新

1
2
javascript复制// 使用青色配色方案
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' fill='rgb(0,255,255)' opacity='.7'/></svg>") 4 4, auto}`;

custom.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
css复制/* 鼠标样式 */
#cursor {
position: fixed;
width: 16px;
height: 16px;
background: rgb(0, 255, 255); /* 设置为青色 */
border-radius: 50%; /* 圆形 */
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); /* 调整缩放比例 */
}
2.鲜绿色配色方案(推荐)

cursor.js 更新

1
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' fill='rgb(0,255,0)' opacity='.7'/></svg>") 4 4, auto}`;

custom.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
/* 鼠标样式 */
#cursor {
position: fixed;
width: 16px;
height: 16px;
background: rgb(0, 255, 0); /* 设置为鲜绿色 */
border-radius: 50%; /* 圆形 */
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); /* 调整缩放比例 */
}

3.深天蓝色配色方案 (推荐)

cursor.js 更新

1
2
javascript复制// 使用橙色配色方案
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' fill='rgb(0,191,255)' opacity='.7'/></svg>") 4 4, auto}`;

custom.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
/* 鼠标样式 */
#cursor {
position: fixed;
width: 16px;
height: 16px;
background: rgb(0,191,255); /* 设置为鲜绿色 */
border-radius: 50%; /* 圆形 */
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); /* 调整缩放比例 */
}