Toggle navigation
在线编辑器
在线代码
文本比较
jQuery下载
前端库
在线手册
登录/注册
下载代码
html
css
js
分享到微信朋友圈
X
html
Log Out
Log Out
css
.logoutButton { --figure-duration: 100ms; --transform-figure: none; --walking-duration: 100ms; --transform-arm1: none; --transform-wrist1: none; --transform-arm2: none; --transform-wrist2: none; --transform-leg1: none; --transform-calf1: none; --transform-leg2: none; --transform-calf2: none; background: none; border: 0; color: #f4f7ff; cursor: pointer; display: block; font-family: 'Quicksand', sans-serif; font-size: 14px; font-weight: 500; height: 40px; outline: none; padding: 0 0 0 20px; perspective: 100px; position: relative; text-align: left; width: 130px; } .logoutButton::before { background-color: #1f2335; border-radius: 5px; content: ''; display: block; height: 100%; left: 0; position: absolute; top: 0; transform: none; transition: transform 50ms ease; width: 100%; z-index: 2; } .logoutButton:hover .door { transform: rotateY(20deg); } .logoutButton:active::before { transform: scale(0.96); } .logoutButton:active .door { transform: rotateY(28deg); } .logoutButton.clicked::before { transform: none; } .logoutButton.clicked .door { transform: rotateY(35deg); } .logoutButton.door-slammed .door { transform: none; transition: transform 100ms ease-in 250ms; } .logoutButton.falling { animation: shake 200ms linear; } .logoutButton.falling .bang { animation: flash 300ms linear; } .logoutButton.falling .figure { animation: spin 1000ms infinite linear; bottom: -1080px; opacity: 0; right: 1px; transition: transform calc(var(--figure-duration) * 1ms) linear, bottom calc(var(--figure-duration) * 1ms) cubic-bezier(0.7, 0.1, 1, 1) 100ms, opacity calc(var(--figure-duration) * 0.25ms) linear calc(var(--figure-duration) * 0.75ms); z-index: 1; } .logoutButton--light::before { background-color: #f4f7ff; } .logoutButton--light .button-text { color: #1f2335; } .logoutButton--light .door, .logoutButton--light .doorway { fill: #1f2335; } .button-text { color: #f4f7ff; font-weight: 500; position: relative; z-index: 10; } svg { display: block; position: absolute; } .figure { bottom: 5px; fill: #4371f7; right: 18px; transform: var(--transform-figure); transition: transform calc(var(--figure-duration) * 1ms) cubic-bezier(0.2, 0.1, 0.8, 0.9); width: 30px; z-index: 4; } .door, .doorway { bottom: 4px; fill: #f4f7ff; right: 12px; width: 32px; } .door { transform: rotateY(20deg); transform-origin: 100% 50%; transform-style: preserve-3d; transition: transform 200ms ease; z-index: 5; } .door path { fill: #4371f7; stroke: #4371f7; stroke-width: 4; } .doorway { z-index: 3; } .bang { opacity: 0; } .arm1, .wrist1, .arm2, .wrist2, .leg1, .calf1, .leg2, .calf2 { transition: transform calc(var(--walking-duration) * 1ms) ease-in-out; } .arm1 { transform: var(--transform-arm1); transform-origin: 52% 45%; } .wrist1 { transform: var(--transform-wrist1); transform-origin: 59% 55%; } .arm2 { transform: var(--transform-arm2); transform-origin: 47% 43%; } .wrist2 { transform: var(--transform-wrist2); transform-origin: 35% 47%; } .leg1 { transform: var(--transform-leg1); transform-origin: 47% 64.5%; } .calf1 { transform: var(--transform-calf1); transform-origin: 55.5% 71.5%; } .leg2 { transform: var(--transform-leg2); transform-origin: 43% 63%; } .calf2 { transform: var(--transform-calf2); transform-origin: 41.5% 73%; } @keyframes spin { from { transform: rotate(0deg) scale(0.94); } to { transform: rotate(359deg) scale(0.94); } } @keyframes shake { 0% { transform: rotate(-1deg); } 50% { transform: rotate(2deg); } 100% { transform: rotate(-1deg); } } @keyframes flash { 0% { opacity: 0.4; } 100% { opacity: 0; } } /**** Wrapper styles ****************/ html, body { height: 100%; } body { align-items: center; background: #f4f7ff; display: flex; justify-content: center; overflow: hidden; -webkit-font-smoothing: antialiased; } body .background { align-items: center; display: flex; height: 100%; justify-content: center; width: 50%; } body .background--light { background: #f4f7ff; } body .background--dark { background: #1f2335; } body button { margin: 20px; }
JavaScript
document.querySelectorAll('.logoutButton').forEach(button => { button.state = 'default' // function to transition a button from one state to the next let updateButtonState = (button, state) => { if (logoutButtonStates[state]) { button.state = state for (let key in logoutButtonStates[state]) { button.style.setProperty(key, logoutButtonStates[state][key]) } } } // mouse hover listeners on button button.addEventListener('mouseenter', () => { if (button.state === 'default') { updateButtonState(button, 'hover') } }) button.addEventListener('mouseleave', () => { if (button.state === 'hover') { updateButtonState(button, 'default') } }) // click listener on button button.addEventListener('click', () => { if (button.state === 'default' || button.state === 'hover') { button.classList.add('clicked') updateButtonState(button, 'walking1') setTimeout(() => { button.classList.add('door-slammed') updateButtonState(button, 'walking2') setTimeout(() => { button.classList.add('falling') updateButtonState(button, 'falling1') setTimeout(() => { updateButtonState(button, 'falling2') setTimeout(() => { updateButtonState(button, 'falling3') setTimeout(() => { button.classList.remove('clicked') button.classList.remove('door-slammed') button.classList.remove('falling') updateButtonState(button, 'default') }, 1000) }, logoutButtonStates['falling2']['--walking-duration']) }, logoutButtonStates['falling1']['--walking-duration']) }, logoutButtonStates['walking2']['--figure-duration']) }, logoutButtonStates['walking1']['--figure-duration']) } }) }) const logoutButtonStates = { 'default': { '--figure-duration': '100', '--transform-figure': 'none', '--walking-duration': '100', '--transform-arm1': 'none', '--transform-wrist1': 'none', '--transform-arm2': 'none', '--transform-wrist2': 'none', '--transform-leg1': 'none', '--transform-calf1': 'none', '--transform-leg2': 'none', '--transform-calf2': 'none' }, 'hover': { '--figure-duration': '100', '--transform-figure': 'translateX(1.5px)', '--walking-duration': '100', '--transform-arm1': 'rotate(-5deg)', '--transform-wrist1': 'rotate(-15deg)', '--transform-arm2': 'rotate(5deg)', '--transform-wrist2': 'rotate(6deg)', '--transform-leg1': 'rotate(-10deg)', '--transform-calf1': 'rotate(5deg)', '--transform-leg2': 'rotate(20deg)', '--transform-calf2': 'rotate(-20deg)' }, 'walking1': { '--figure-duration': '300', '--transform-figure': 'translateX(11px)', '--walking-duration': '300', '--transform-arm1': 'translateX(-4px) translateY(-2px) rotate(120deg)', '--transform-wrist1': 'rotate(-5deg)', '--transform-arm2': 'translateX(4px) rotate(-110deg)', '--transform-wrist2': 'rotate(-5deg)', '--transform-leg1': 'translateX(-3px) rotate(80deg)', '--transform-calf1': 'rotate(-30deg)', '--transform-leg2': 'translateX(4px) rotate(-60deg)', '--transform-calf2': 'rotate(20deg)' }, 'walking2': { '--figure-duration': '400', '--transform-figure': 'translateX(17px)', '--walking-duration': '300', '--transform-arm1': 'rotate(60deg)', '--transform-wrist1': 'rotate(-15deg)', '--transform-arm2': 'rotate(-45deg)', '--transform-wrist2': 'rotate(6deg)', '--transform-leg1': 'rotate(-5deg)', '--transform-calf1': 'rotate(10deg)', '--transform-leg2': 'rotate(10deg)', '--transform-calf2': 'rotate(-20deg)' }, 'falling1': { '--figure-duration': '1600', '--walking-duration': '400', '--transform-arm1': 'rotate(-60deg)', '--transform-wrist1': 'none', '--transform-arm2': 'rotate(30deg)', '--transform-wrist2': 'rotate(120deg)', '--transform-leg1': 'rotate(-30deg)', '--transform-calf1': 'rotate(-20deg)', '--transform-leg2': 'rotate(20deg)' }, 'falling2': { '--walking-duration': '300', '--transform-arm1': 'rotate(-100deg)', '--transform-arm2': 'rotate(-60deg)', '--transform-wrist2': 'rotate(60deg)', '--transform-leg1': 'rotate(80deg)', '--transform-calf1': 'rotate(20deg)', '--transform-leg2': 'rotate(-60deg)' }, 'falling3': { '--walking-duration': '500', '--transform-arm1': 'rotate(-30deg)', '--transform-wrist1': 'rotate(40deg)', '--transform-arm2': 'rotate(50deg)', '--transform-wrist2': 'none', '--transform-leg1': 'rotate(-30deg)', '--transform-leg2': 'rotate(20deg)', '--transform-calf2': 'none' } }
粒子
时间
文字
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号