Toggle navigation
在线编辑器
在线代码
文本比较
jQuery下载
前端库
在线手册
登录/注册
下载代码
html
css
js
分享到微信朋友圈
X
html
css
* { box-sizing: border-box; text-rendering: optimizeLegibility; -webkit-font-smoothing: antialiased; } body { background: #111; } #app { display: flex; place-items: center; min-height: 100vh; } .shimmer-text { position: absolute; top: 50%; left: 50%; -webkit-transform: translate(-50%, -50%); transform: translate(-50%, -50%); width: 100vmin; } .shimmer-text svg { position: absolute; width: 100%; height: auto; font: bold 4rem sans-serif; text-transform: uppercase; -webkit-transform: translate(0, -50%); transform: translate(0, -50%); } .shimmer-text circle { fill: hsl(var(--hue, 235), 100%, calc(var(--lightness, 50) * 1%)); } .shimmer-text__text { fill: url("#shimmer-text__pattern"); }
JavaScript
const { gsap: { to, set, utils: { random } }, dat: { GUI }, React, React: { useEffect, useRef, useState }, ReactDOM: { render } } = window; const CONFIG = { CONFIG: { dots: 15, size: 1, text: 'Hey!', viewbox_width: 240, viewbox_height: 80 }, ANIMATION: { scale_speed: 1, scale_delay: 5, lighten_speed: 0.15, lighten_delay: 2 }, PROBABILITY: { scale: 0.85, lighten: 0.6 } }; const BOUNDS = { CONFIG: { dots: [2, 30], size: [0.1, 5, 0.1], viewbox_width: [0, 500, 1], viewbox_height: [0, 500, 1] }, ANIMATION: { scale_speed: [0.1, 2, 0.01], scale_delay: [0, 10, 0.01], lighten_speed: [0.1, 2, 0.01], lighten_delay: [0, 10, 0.01] }, PROBABILITY: { scale: [0, 1, 0.01], lighten: [0, 1, 0.01] } }; const ANIMATE = (element, props, config) => { to(element, config.duration, { yoyo: true, repeat: 1, delay: `random(0, ${config.delay})`, onComplete: () => ANIMATE(element, props, config), ...props }); }; const App = () => { const [model, setModel] = useState(0); const datRef = useRef(null); const { size, dots, text, viewbox_width: width, viewbox_height: height } = CONFIG.CONFIG; useEffect(() => { if (!datRef.current) { datRef.current = new GUI({ name: 'Shimmer Text Config' }); for (const CATEGORY in BOUNDS) { const FOLDER = datRef.current.addFolder(CATEGORY); for (const spec in BOUNDS[CATEGORY]) { FOLDER.add( CONFIG[CATEGORY], spec, BOUNDS[CATEGORY][spec][0], BOUNDS[CATEGORY][spec][1], BOUNDS[CATEGORY][spec][2] ? BOUNDS[CATEGORY][spec][2] : 1). name(spec.replace('_', ' ').toUpperCase()). onFinishChange(() => setModel(new Date().getTime())); } } datRef.current. add(CONFIG.CONFIG, 'text'). name('TEXT'). onChange(() => setModel(new Date().getTime())); } // Need to animate all the new circles. set(document.querySelectorAll('circle'), { transformOrigin: '50% 50%' }); const CIRCLES = document.querySelectorAll('circle'); const SCALERS = [...CIRCLES].filter( () => Math.random() > CONFIG.PROBABILITY.scale); SCALERS.forEach((el) => ANIMATE( el, { scale: 0 }, { duration: random(0.1, CONFIG.ANIMATION.scale_speed), delay: CONFIG.ANIMATION.scale_delay })); const BRIGHTS = [...CIRCLES].filter( () => Math.random() > CONFIG.PROBABILITY.lighten); BRIGHTS.forEach((el) => ANIMATE( el, { '--lightness': 100 }, { duration: random(0.1, CONFIG.ANIMATION.lighten_speed), delay: CONFIG.ANIMATION.lighten_delay })); }, [model]); const HUE = Math.random() * 360; return ( React.createElement("div", { className: "shimmer-text" }, React.createElement("svg", { viewBox: `0 0 ${width} ${height}` }, React.createElement("pattern", { id: "shimmer-text__pattern", viewBox: `-${size / 2} -${size / 2} ${size * dots} ${size * dots}`, patternUnits: "userSpaceOnUse", width: `${size * (dots * 2) - size / 2}`, height: `${size * (dots * 2) - size / 2}`, x: "0", y: "0" }, new Array(dots * dots).fill().map((_, index) => React.createElement("circle", { key: `circle--${index}--${model}`, r: `${size / 2}`, cx: `${index % dots * size}`, cy: `${Math.floor(index / dots) * size}`, style: { '--lightness': 40 + Math.random() * 30, '--hue': HUE } }))), React.createElement("text", { className: "shimmer-text__text", textAnchor: "middle", x: "50%", y: "50%", dy: ".35em" }, text)))); }; render(React.createElement(App, null), document.getElementById('app'));
粒子
时间
文字
hover
canvas
3d
游戏
音乐
火焰
水波
轮播图
鼠标跟随
动画
css
加载动画
导航
菜单
按钮
滑块
tab
弹出层
统计图
svg
×
Close
在线代码下载提示
开通在线代码永久免费下载,需支付20jQ币
开通后,在线代码模块中所有代码可终身免费下!
您已开通在线代码永久免费下载,关闭提示框后,点下载代码可直接下载!
您已经开通过在线代码永久免费下载
对不起,您的jQ币不足!可通过发布资源 或
直接充值获取jQ币
取消
开通下载
<!doctype html> <html> <head> <meta charset="utf-8"> <title>带SVG的闪亮文本-jq22.com</title> <script src="https://www.jq22.com/jquery/jquery-1.10.2.js"></script> <style>
</style> </head> <body>
<script>
</script>
</body> </html>
2012-2021 jQuery插件库版权所有
jquery插件
|
jq22工具库
|
网页技术
|
广告合作
|
在线反馈
|
版权声明
沪ICP备13043785号-1
浙公网安备 33041102000314号