[js]网页输入框打字特效(懒人版)

2022-5-16 18:45| 发布者: Hocassian| 查看: 60| 评论: 0|原作者: 神代綺凜

摘要:
C:\Users\Administrator\Downloads\神代綺凜\2019-10-15-14-34-56-19827352211700-文章归档 - 神代綺凜の萌化小基地-采集的数据-后羿采集器.html

标题

[js] 网页输入框打字特效(懒人版)

标题链接

https://moe.best/modification/js-input-effect.html

正文

一个可用于博客的 JavaScript 网页输入框打字特效

Head Pic: 「空の境界×Fate/GO コラボ記念」/「冬ゆき」のイラスト [pixiv]

网页输入框打字特效(js)

具体效果见本博客评论输入打字效果

如何使用

直接下载 这个js脚本 放到网站的某个位置,然后在博客的 footer 模板中引用即可,无需再添加任何额外代码。

1
2
<!-- In footer.php --> <script type="text/javascript" src="(这个脚本的路径)"></script>
这个 JavaScript 脚本已经经过混淆压缩,相比原版脚本更节省流量。
请务必在 footer,即网页模板中 body 的末尾位置引用!
如果在 header 中引用会有找不到 body 的错误。

源码(未压缩混淆)

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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
(function webpackUniversalModuleDefinition(root, factory) { if (typeof exports === 'object' && typeof module === 'object') module.exports = factory(); else if (typeof define === 'function' && define.amd) define([], factory); else if (typeof exports === 'object') exports["POWERMODE"] = factory(); else root["POWERMODE"] = factory() })(this, function() { return (function(modules) { var installedModules = {}; function __webpack_require__(moduleId) { if (installedModules[moduleId]) return installedModules[moduleId].exports; var module = installedModules[moduleId] = { exports: {}, id: moduleId, loaded: false }; modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); module.loaded = true; return module.exports } __webpack_require__.m = modules; __webpack_require__.c = installedModules; __webpack_require__.p = ""; return __webpack_require__(0) })([function(module, exports, __webpack_require__) { 'use strict'; var canvas = document.createElement('canvas'); canvas.width = window.innerWidth; canvas.height = window.innerHeight; canvas.style.cssText = 'position:fixed;top:0;left:0;pointer-events:none;z-index:999999'; window.addEventListener('resize', function() { canvas.width = window.innerWidth; canvas.height = window.innerHeight }); document.body.appendChild(canvas); var context = canvas.getContext('2d'); var particles = []; var particlePointer = 0; var frames = 120; var framesRemain = frames; var rendering = false; POWERMODE.shake = true; function getRandom(min, max) { return Math.random() * (max - min) + min } function getColor(el) { if (POWERMODE.colorful) { var u = getRandom(0, 360); return 'hsla(' + getRandom(u - 10, u + 10) + ', 100%, ' + getRandom(50, 80) + '%, ' + 1 + ')' } else { return window.getComputedStyle(el).color } } function getCaret() { var el = document.activeElement; var bcr; if (el.tagName === 'TEXTAREA' || (el.tagName === 'INPUT' && el.getAttribute('type') === 'text')) { var offset = __webpack_require__(1)(el, el.selectionStart); bcr = el.getBoundingClientRect(); return { x: offset.left + bcr.left, y: offset.top + bcr.top, color: getColor(el) } } var selection = window.getSelection(); if (selection.rangeCount) { var range = selection.getRangeAt(0); var startNode = range.startContainer; if (startNode.nodeType === document.TEXT_NODE) { startNode = startNode.parentNode } bcr = range.getBoundingClientRect(); return { x: bcr.left, y: bcr.top, color: getColor(startNode) } } return { x: 0, y: 0, color: 'transparent' } } function createParticle(x, y, color) { return { x: x, y: y, alpha: 1, color: color, velocity: { x: -1 + Math.random() * 2, y: -3.5 + Math.random() * 2 } } } function POWERMODE() { { var caret = getCaret(); var numParticles = 5 + Math.round(Math.random() * 10); while (numParticles--) { particles[particlePointer] = createParticle(caret.x, caret.y, caret.color); particlePointer = (particlePointer + 1) % 500 } framesRemain = frames; if (!rendering) { requestAnimationFrame(loop) } } { if (POWERMODE.shake) { var intensity = 1 + 2 * Math.random(); var x = intensity * (Math.random() > 0.5 ? -1 : 1); var y = intensity * (Math.random() > 0.5 ? -1 : 1); document.body.style.marginLeft = x + 'px'; document.body.style.marginTop = y + 'px'; setTimeout(function() { document.body.style.marginLeft = ''; document.body.style.marginTop = '' }, 75) } } }; POWERMODE.colorful = false; function loop() { if (framesRemain > 0) { requestAnimationFrame(loop); framesRemain--; rendering = true } else { rendering = false } context.clearRect(0, 0, canvas.width, canvas.height); for (var i = 0; i < particles.length; ++i) { var particle = particles[i]; if (particle.alpha <= 0.1) continue; particle.velocity.y += 0.075; particle.x += particle.velocity.x; particle.y += particle.velocity.y; particle.alpha *= 0.96; context.globalAlpha = particle.alpha; context.fillStyle = particle.color; context.fillRect(Math.round(particle.x - 1.5), Math.round(particle.y - 1.5), 3, 3) } } requestAnimationFrame(loop); module.exports = POWERMODE }, function(module, exports) { (function() { var properties = ['direction', 'boxSizing', 'width', 'height', 'overflowX', 'overflowY', 'borderTopWidth', 'borderRightWidth', 'borderBottomWidth', 'borderLeftWidth', 'borderStyle', 'paddingTop', 'paddingRight', 'paddingBottom', 'paddingLeft', 'fontStyle', 'fontVariant', 'fontWeight', 'fontStretch', 'fontSize', 'fontSizeAdjust', 'lineHeight', 'fontFamily', 'textAlign', 'textTransform', 'textIndent', 'textDecoration', 'letterSpacing', 'wordSpacing', 'tabSize', 'MozTabSize']; var isFirefox = window.mozInnerScreenX != null; function getCaretCoordinates(element, position, options) { var debug = options && options.debug || false; if (debug) { var el = document.querySelector('#input-textarea-caret-position-mirror-div'); if (el) { el.parentNode.removeChild(el) } } var div = document.createElement('div'); div.id = 'input-textarea-caret-position-mirror-div'; document.body.appendChild(div); var style = div.style; var computed = window.getComputedStyle ? getComputedStyle(element) : element.currentStyle; style.whiteSpace = 'pre-wrap'; if (element.nodeName !== 'INPUT') style.wordWrap = 'break-word'; style.position = 'absolute'; if (!debug) style.visibility = 'hidden'; properties.forEach(function(prop) { style[prop] = computed[prop] }); if (isFirefox) { if (element.scrollHeight > parseInt(computed.height)) style.overflowY = 'scroll' } else { style.overflow = 'hidden' } div.textContent = element.value.substring(0, position); if (element.nodeName === 'INPUT') div.textContent = div.textContent.replace(/\s/g, "\u00a0"); var span = document.createElement('span'); span.textContent = element.value.substring(position) || '.'; div.appendChild(span); var coordinates = { top: span.offsetTop + parseInt(computed['borderTopWidth']), left: span.offsetLeft + parseInt(computed['borderLeftWidth']) }; if (debug) { span.style.backgroundColor = '#aaa' } else { document.body.removeChild(div) } return coordinates } if (typeof module != "undefined" && typeof module.exports != "undefined") { module.exports = getCaretCoordinates } else { window.getCaretCoordinates = getCaretCoordinates } }()) } ]) }); POWERMODE.colorful = true; // make power mode colorful POWERMODE.shake = false; // turn off shake document.body.addEventListener('input', POWERMODE);

引用

此脚本相较原始有些许改进。

转载自 林叶展弟弟 - 评论输入框打字特效
原始来源 QQ爹の博客 - 分享一个输入框的打字特效

搬瓦工VPS优惠套餐,建站稳如狗,支持支付宝,循环出账94折优惠码BWH26FXH3HIQ
年付$28CN2线路,1核/512M内存/10G硬盘/500GB@1Gbps【点击购买】(经常售罄,请抓紧机会)
年付$47CN2线路,1核/1G内存/20G硬盘/1T@1Gbps【点击购买
最后修改:2018 年 01 月 07 日 09 : 29 PM
如果觉得我的文章对你有用,请随意赞赏

文章信息

中二病患者: 神代綺凜  发布时间:2017 年 10 月 21 日  28145 次浏览   33 条评论  10910 字数 分类: 各种魔改


路过

雷人

握手

鲜花

鸡蛋

最新评论

返回顶部