Toggle navigation
在线编辑器
在线代码
文本比较
jQuery下载
前端库
在线手册
登录/注册
下载代码
html
css
js
分享到微信朋友圈
X
html
Yeah, I want that
Redirected
css
.pay-button { --c-color: #000; --c-background: #20D8F9; --c-light: #FCBB33; --c-light-shine: linear-gradient(90deg, rgba(252, 187, 51, 0.9), rgba(252, 187, 51, 0)); --c-base: #0D6E9D; --c-wheel: #0D6E9D; --c-wheel-inner: #004e71; --c-wheel-dot: #fff; --c-back: #F2F6FE; --c-back-inner: #2790C3; --c-front: #F2F6FE; --c-front-shadow: #CDD1D9; --c-window: #000; --rotate: 0deg; --y: 0px; --scale: 1; --default-o: 1; --success-o: 0; --success-offset: 16px; --truck-y: 0px; --truck-base-x: 16px; --truck-wrapper-y: 70px; --light-opacity: 0; padding: 15px 0; width: 260px; border-radius: 27px; cursor: pointer; text-align: center; position: relative; border: none; outline: none; background: var(--c-background); color: var(--c-color); -webkit-appearance: none; -webkit-tap-highlight-color: transparent; -webkit-transform-style: preserve-3d; transform-style: preserve-3d; -webkit-transform: translateY(var(--y)) rotateX(var(--rotate)) scale(var(--scale)) translateZ(0); transform: translateY(var(--y)) rotateX(var(--rotate)) scale(var(--scale)) translateZ(0); } .pay-button:before { content: ''; position: absolute; left: 0; top: 0; width: 100%; background: var(--c-background); height: 4px; border-radius: 2px; display: block; top: 50%; margin-top: -2px; -webkit-transform-origin: 0 100%; transform-origin: 0 100%; -webkit-transform: rotateX(90deg); transform: rotateX(90deg); } .pay-button .default, .pay-button .success { display: block; font-weight: bold; font-size: 20px; line-height: 24px; opacity: var(--o, var(--default-o)); } .pay-button .success { --o: var(--success-o); position: absolute; top: 15px; left: 0; right: 0; } .pay-button .success svg { width: 16px; height: 14px; display: inline-block; vertical-align: top; fill: none; margin: 5px 0 0 8px; stroke: var(--c-color); stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; stroke-dasharray: 16px; stroke-dashoffset: var(--success-offset); } .pay-button .truck-wrapper { position: absolute; pointer-events: none; top: -140px; left: -100px; right: -40px; bottom: 0px; overflow: hidden; -webkit-transform: translateY(var(--truck-wrapper-y)) rotateX(90deg); transform: translateY(var(--truck-wrapper-y)) rotateX(90deg); -webkit-mask-image: linear-gradient(to left, transparent 0%, black 60px, black); mask-image: linear-gradient(to left, transparent 0%, black 60px, black); } .pay-button .truck-wrapper .truck { position: absolute; top: 24px; left: 100px; width: 72px; height: 60px; -webkit-transform: translate3d(var(--truck-base-x), calc(var(--truck-y)), 0); transform: translate3d(var(--truck-base-x), calc(var(--truck-y)), 0); } .pay-button .truck-wrapper .truck:before, .pay-button .truck-wrapper .truck:after { content: ''; position: absolute; bottom: -9px; left: var(--l, 25px); width: 16px; height: 16px; border-radius: 50%; z-index: 2; box-shadow: inset 0 0 0 3px var(--c-wheel), inset 0 0 0 6px var(--c-wheel-inner); background: var(--c-wheel-dot); -webkit-transform: translateY(calc(var(--truck-y) * -1)) translateZ(0); transform: translateY(calc(var(--truck-y) * -1)) translateZ(0); } .pay-button .truck-wrapper .truck:after { --l: 85px; } .pay-button .truck-wrapper .truck .wheel, .pay-button .truck-wrapper .truck .wheel:before { position: absolute; bottom: var(--b, -9px); left: var(--l, 6px); width: 16px; height: 16px; border-radius: 50%; background: var(--c-wheel); -webkit-transform: translateZ(0); transform: translateZ(0); } .pay-button .truck-wrapper .truck .wheel { -webkit-transform: translateY(calc(var(--truck-y) * -1)) translateZ(0); transform: translateY(calc(var(--truck-y) * -1)) translateZ(0); } .pay-button .truck-wrapper .truck .wheel:before { --l: 60px; --b: 0; content: ''; } .pay-button .truck-wrapper .truck .light { position: absolute; right: -41px; bottom: 3px; width: 4px; height: 3px; border-radius: 1px 0 0 1px; background: var(--c-light); } .pay-button .truck-wrapper .truck .light:before, .pay-button .truck-wrapper .truck .light:after { content: ''; position: absolute; left: 4px; top: -6px; display: block; width: 40px; height: 19px; background: var(--c-light-shine); opacity: var(--light-opacity); -webkit-clip-path: polygon(0 6px, 100% 0, 100% 80%, 0 9px); clip-path: polygon(0 6px, 100% 0, 100% 80%, 0 9px); } .pay-button .truck-wrapper .truck .light:after { left: -8px; -webkit-clip-path: polygon(11px 4px, 100% 0, 100% 80%, 11px 11px); clip-path: polygon(11px 4px, 100% 0, 100% 80%, 11px 11px); } .pay-button .truck-wrapper .truck .front, .pay-button .truck-wrapper .truck .back, .pay-button .truck-wrapper .truck .box { position: absolute; } .pay-button .truck-wrapper .truck .back { left: 0; bottom: 0; z-index: 1; width: 75px; height: 45px; border-radius: 3px 3px 0 0; background: var(--c-back-inner); } .pay-button .truck-wrapper .truck .back:before, .pay-button .truck-wrapper .truck .back:after { content: ''; position: absolute; } .pay-button .truck-wrapper .truck .back:before { left: 17px; top: 0; right: 0; bottom: 0; z-index: 4; border-radius: 0 2px 0 0; background: var(--c-back); } .pay-button .truck-wrapper .truck .back:after { border-radius: 2px; width: 116px; height: 4px; left: -2px; bottom: -4px; background: var(--c-base); } .pay-button .truck-wrapper .truck .back .shadow { height: 44px; width: 14px; position: absolute; top: 0; left: 3px; z-index: 3; -webkit-clip-path: polygon(0 0, 100% 0, 100% 100%); clip-path: polygon(0 0, 100% 0, 100% 100%); background: rgba(0, 0, 0, 0.15); } .pay-button .truck-wrapper .truck .back svg { display: block; position: absolute; z-index: 5; left: 38px; top: 10px; } .pay-button .truck-wrapper .truck .back svg.icon { top: 30px; right: 20px; z-index: 2; left: auto; } .pay-button .truck-wrapper .truck .front { left: 75px; bottom: 0; height: 33px; width: 37px; -webkit-clip-path: polygon(55% 0, 72% 44%, 100% 58%, 100% 100%, 0 100%, 0 0); clip-path: polygon(55% 0, 72% 44%, 100% 58%, 100% 100%, 0 100%, 0 0); background: linear-gradient(84deg, var(--c-front-shadow) 0%, var(--c-front-shadow) 10%, var(--c-front) 12%, var(--c-front) 100%); } .pay-button .truck-wrapper .truck .front:before { content: ''; position: absolute; width: 11px; height: 12px; left: 11px; top: 3px; -webkit-clip-path: polygon(0 0, 60% 0%, 100% 100%, 0% 100%); clip-path: polygon(0 0, 60% 0%, 100% 100%, 0% 100%); background: var(--c-window); } .shorticons { position: absolute; left: 50%; bottom: 14px; line-height: 32px; color: #fff; font-weight: 600; font-size: 14px; display: block; text-decoration: none; -webkit-transform: translateX(-50%); transform: translateX(-50%); } html { box-sizing: border-box; -webkit-font-smoothing: antialiased; } * { box-sizing: inherit; } *:before, *:after { box-sizing: inherit; } body { min-height: 100vh; display: -webkit-box; display: flex; font-family: 'Poppins', Arial; -webkit-box-pack: center; justify-content: center; -webkit-box-align: center; align-items: center; background: #000; }
JavaScript
const { to, set, from, fromTo, registerPlugin } = gsap registerPlugin(MotionPathPlugin); document.querySelectorAll('.pay-button').forEach(button => { button.addEventListener('pointerdown', e => { if(button.classList.contains('animating')) { return } to(button, { '--scale': .975, duration: .15 }) }) button.addEventListener('pointerup', e => { if(button.classList.contains('animating')) { return } to(button, { '--scale': 1, duration: .15 }) }) button.addEventListener('pointerleave', e => { if(button.classList.contains('animating')) { return } to(button, { '--scale': 1, duration: .15 }) }) button.addEventListener('click', e => { e.preventDefault() button.classList.add('animating') if(button.classList.contains('done')) { to(button, { '--success-o': 0, duration: .15 }) to(button, { '--default-o': 1, duration: .4, clearProps: true, onComplete() { button.classList.remove('animating', 'done') } }) return } to(button, { '--rotate': '-90deg', '--y': '25px', '--default-o': 0, duration: .2 }) to(button, { keyframes: [{ '--light-opacity': 1, duration: .3, delay: .15, onComplete() { from(button.querySelectorAll('.icon'), { stagger: .2, opacity: 0, duration: .15 }) set(button.querySelectorAll('.icon'), { x: gsap.utils.random(-100, -80), y: gsap.utils.random(-80, -60) }) to(button.querySelectorAll('.icon'), { stagger: .2, duration: .5, motionPath: { path: [{ x: gsap.utils.random(-60, -40), y: gsap.utils.random(-10, -30), }, { x: 0, y: 0 }], curviness: .5 }, rotation: `-=${gsap.utils.random(-720, 720)}`, }) } }, { '--truck-y': '1px', duration: .1, delay: .2 }, { '--truck-y': '0px', duration: .1 }, { '--truck-y': '1px', duration: .1, }, { '--truck-y': '0px', duration: .1 }, { '--truck-y': '1px', duration: .1, }, { '--truck-y': '0px', duration: .1 }, { '--truck-y': '1px', duration: .1 }, { '--truck-y': '0px', duration: .1 }], onComplete() { to(button, { keyframes: [{ '--truck-base-x': '-4px', duration: .4 }, { '--truck-base-x': '60px', duration: 1 }, { '--truck-base-x': '20px', duration: .6 }, { '--truck-base-x': '300px', duration: .4 }], onComplete() { button.classList.add('done') button.classList.remove('animating') to(button, { keyframes: [{ '--rotate': '0deg', '--y': '0px', duration: .2 }, { '--success-offset': '0px', '--success-o': 1, duration: .2 }] }) } }) } }) }) })
粒子
时间
文字
hover
canvas
3d
游戏
音乐
火焰
水波
轮播图
鼠标跟随
动画
css
加载动画
导航
菜单
按钮
滑块
tab
弹出层
统计图
svg
×
Close
在线代码下载提示
开通在线代码永久免费下载,需支付20jQ币
开通后,在线代码模块中所有代码可终身免费下!
您已开通在线代码永久免费下载,关闭提示框后,点下载代码可直接下载!
您已经开通过在线代码永久免费下载
对不起,您的jQ币不足!可通过发布资源 或
直接充值获取jQ币
取消
开通下载
<!doctype html> <html> <head> <meta charset="utf-8"> <title>支付按钮动画-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号