Toggle navigation
在线编辑器
在线代码
文本比较
jQuery下载
前端库
在线手册
登录/注册
下载代码
html
css
js
分享到微信朋友圈
X
html
css
@-webkit-keyframes hover { 0% { top: 0; } 100% { top: 8px; } } @keyframes hover { 0% { top: 0; } 100% { top: 8px; } } @-webkit-keyframes star-entrance { 0% { -webkit-transform: rotate(-735deg) scale(0, 0); transform: rotate(-735deg) scale(0, 0); } 100% { -webkit-transform: rotate(0) scale(1, 1); transform: rotate(0) scale(1, 1); } } @keyframes star-entrance { 0% { -webkit-transform: rotate(-735deg) scale(0, 0); transform: rotate(-735deg) scale(0, 0); } 100% { -webkit-transform: rotate(0) scale(1, 1); transform: rotate(0) scale(1, 1); } } @-webkit-keyframes star-exit { 0% { -webkit-transform: rotate(0) scale(1, 1); transform: rotate(0) scale(1, 1); } 100% { -webkit-transform: rotate(360deg) scale(0, 0); transform: rotate(360deg) scale(0, 0); } } @keyframes star-exit { 0% { -webkit-transform: rotate(0) scale(1, 1); transform: rotate(0) scale(1, 1); } 100% { -webkit-transform: rotate(360deg) scale(0, 0); transform: rotate(360deg) scale(0, 0); } } @-webkit-keyframes twinkle { 0% { -webkit-transform: rotate(0deg) scale(1, 1); transform: rotate(0deg) scale(1, 1); } 25% { -webkit-transform: rotate(10deg) scale(0.8, 0.8); transform: rotate(10deg) scale(0.8, 0.8); } 50% { -webkit-transform: rotate(0deg) scale(0.9, 0.9); transform: rotate(0deg) scale(0.9, 0.9); } 75% { -webkit-transform: rotate(-20deg) scale(0.6, 0.6); transform: rotate(-20deg) scale(0.6, 0.6); } 100% { -webkit-transform: rotate(0deg) scale(1, 1); transform: rotate(0deg) scale(1, 1); } } @keyframes twinkle { 0% { -webkit-transform: rotate(0deg) scale(1, 1); transform: rotate(0deg) scale(1, 1); } 25% { -webkit-transform: rotate(10deg) scale(0.8, 0.8); transform: rotate(10deg) scale(0.8, 0.8); } 50% { -webkit-transform: rotate(0deg) scale(0.9, 0.9); transform: rotate(0deg) scale(0.9, 0.9); } 75% { -webkit-transform: rotate(-20deg) scale(0.6, 0.6); transform: rotate(-20deg) scale(0.6, 0.6); } 100% { -webkit-transform: rotate(0deg) scale(1, 1); transform: rotate(0deg) scale(1, 1); } } @-webkit-keyframes waving { 0% { -webkit-transform: rotate(-45deg); transform: rotate(-45deg); } 25% { -webkit-transform: rotate(-55deg); transform: rotate(-55deg); } 50% { -webkit-transform: rotate(-45deg); transform: rotate(-45deg); } 75% { -webkit-transform: rotate(-55deg); transform: rotate(-55deg); } 100% { -webkit-transform: rotate(-45deg); transform: rotate(-45deg); } } @keyframes waving { 0% { -webkit-transform: rotate(-45deg); transform: rotate(-45deg); } 25% { -webkit-transform: rotate(-55deg); transform: rotate(-55deg); } 50% { -webkit-transform: rotate(-45deg); transform: rotate(-45deg); } 75% { -webkit-transform: rotate(-55deg); transform: rotate(-55deg); } 100% { -webkit-transform: rotate(-45deg); transform: rotate(-45deg); } } html { height: 100%; } body { height: 100%; position: relative; display: flex; align-items: center; justify-content: center; background-color: #292B25; } .scene-container { position: relative; width: 140px; height: 160px; } .scene-container:focus { outline: none; } .scene-container.run-away .ghost { -webkit-transform: rotateX(-10deg) scale3d(1.4, 4, 1) translate3d(0, 130%, -30px); transform: rotateX(-10deg) scale3d(1.4, 4, 1) translate3d(0, 130%, -30px); transition: -webkit-transform 800ms ease; transition: transform 800ms ease; transition: transform 800ms ease, -webkit-transform 800ms ease; } .scene-container.descend .ghost { -webkit-transform: translate3d(0, 130%, 0); transform: translate3d(0, 130%, 0); } .ghost-container { position: relative; width: 80px; height: 140px; padding: 20px 30px 0 30px; overflow: hidden; -webkit-perspective: 30px; perspective: 30px; } .ghost { position: relative; height: 115px; z-index: 1; transition: -webkit-transform 2000ms ease-out; transition: transform 2000ms ease-out; transition: transform 2000ms ease-out, -webkit-transform 2000ms ease-out; } .ghost.hover { -webkit-animation: hover 600ms ease-in-out infinite alternate; animation: hover 600ms ease-in-out infinite alternate; } .ghost-head { position: relative; width: 80px; height: 0; padding-top: 100%; border-radius: 100%; background-color: #F0EFDC; } .ghost-head .ghost-face { position: absolute; bottom: 10px; left: 10px; width: 50px; height: 30px; z-index: 1; } .eyes-row, .mouth-row { position: relative; height: 10px; } .mouth-row { margin-top: 3px; } .eye { height: 10px; width: 10px; background-color: #271917; border-radius: 100%; position: absolute; bottom: 0; transition: height 50ms ease; } .eye.left { left: 5px; } .eye.right { right: 5px; } .eye.blink { height: 0; } .mouth { position: absolute; left: 50%; top: 0; height: 10px; -webkit-transform: translate3d(-50%, 0, 0); transform: translate3d(-50%, 0, 0); } .mouth .mouth-top { width: 18px; height: 2px; border-radius: 2px 2px 0 0; background-color: #271917; } .mouth .mouth-bottom { position: absolute; width: 18px; height: 8px; bottom: 0; overflow: hidden; transition: height 150ms ease; } .mouth .mouth-bottom:after { content: ''; display: block; position: absolute; left: 0; bottom: 0; width: 18px; height: 16px; border-radius: 100%; background-color: #271917; } .mouth.open .mouth-bottom { height: 16px; } .mouth.closed .mouth-bottom { height: 0; } .cheek { position: absolute; top: 0; width: 12px; height: 4px; background-color: #F5C1B6; border-radius: 100%; } .cheek.left { left: 0; } .cheek.right { right: 0; } .ghost-body { position: absolute; top: 40px; height: 0; width: 80px; padding-top: 85%; background-color: #F0EFDC; } .ghost-hand { height: 36px; width: 22px; background: #F0EFDC; border-radius: 100%/90%; position: absolute; } .ghost-hand.hand-left { left: -12px; top: 10px; -webkit-transform: rotateZ(-45deg); transform: rotateZ(-45deg); left: 0; top: 5px; -webkit-transform-origin: bottom center; transform-origin: bottom center; } .ghost-hand.hand-left.waving { -webkit-animation: waving 400ms linear; animation: waving 400ms linear; } .ghost-hand.hand-right { right: -12px; top: 10px; -webkit-transform: rotateZ(45deg); transform: rotateZ(45deg); } .ghost-skirt { position: absolute; left: 0; bottom: 0; width: 100%; display: flex; -webkit-transform: translateY(50%); transform: translateY(50%); } .ghost-skirt .pleat { width: 20%; height: 8px; border-radius: 100%; } .ghost-skirt .pleat.down { background-color: #F0EFDC; } .ghost-skirt .pleat.up { background-color: #292B25; position: relative; top: 1px; } .shadow-container { transition: -webkit-transform 800ms ease; transition: transform 800ms ease; transition: transform 800ms ease, -webkit-transform 800ms ease; } .shadow-container.disappear { -webkit-transform: scale3d(0, 1, 1); transform: scale3d(0, 1, 1); transition: -webkit-transform 400ms ease; transition: transform 400ms ease; transition: transform 400ms ease, -webkit-transform 400ms ease; } .shadow { position: absolute; top: calc(100% - 4px); left: 0; width: 100%; height: 8px; background-color: #1B1D18; border-radius: 100%; z-index: -1; } .shadow-bottom { position: absolute; top: 100%; left: 0; height: 4px; width: 100%; overflow: hidden; } .shadow-bottom:after { content: ''; display: block; width: 100%; position: absolute; height: 8px; left: 0; bottom: 0; border-radius: 100%; background-color: #1B1D18; z-index: 2; } .star { position: absolute; -webkit-animation: twinkle 2s infinite linear; animation: twinkle 2s infinite linear; transition: top 400ms ease-out, left 400ms ease-out; } .star.round .star-element { height: 9px; width: 9px; border-radius: 100%; } .star.pointy { -webkit-transform: rotate(-15deg); transform: rotate(-15deg); } .star.pointy .star-element { height: 6px; width: 6px; } .star.pointy .star-element:before, .star.pointy .star-element:after { content: ''; display: block; position: absolute; background: green; border-radius: 6px; } .star.pointy .star-element:before { height: 6px; width: 12px; left: -3px; top: 0; -webkit-transform: skewX(60deg); transform: skewX(60deg); } .star.pointy .star-element:after { height: 12px; width: 6px; right: 0; bottom: -3px; -webkit-transform: skewY(-60deg); transform: skewY(-60deg); } .star.orange .star-element, .star.orange .star-element:before, .star.orange .star-element:after { background-color: #DF814D; } .star.yellow .star-element, .star.yellow .star-element:before, .star.yellow .star-element:after { background-color: #FFD186; } .star.blue .star-element, .star.blue .star-element:before, .star.blue .star-element:after { background-color: #83D0BC; } .star-1 { top: 130%; left: 40%; transition-delay: 200ms; -webkit-animation-delay: 0ms; animation-delay: 0ms; z-index: 2; } .star-2 { top: 130%; left: 44%; transition-delay: 250ms; -webkit-animation-delay: 200ms; animation-delay: 200ms; } .star-3 { top: 130%; left: 48%; transition-delay: 300ms; -webkit-animation-delay: 400ms; animation-delay: 400ms; z-index: 2; } .star-4 { top: 130%; left: 52%; transition-delay: 350ms; -webkit-animation-delay: 600ms; animation-delay: 600ms; } .star-5 { top: 130%; left: 56%; transition-delay: 400ms; -webkit-animation-delay: 800ms; animation-delay: 800ms; z-index: 2; } .star-6 { top: 130%; left: 60%; transition-delay: 450ms; -webkit-animation-delay: 1000ms; animation-delay: 1000ms; } .move-stars-out .star-element { -webkit-animation: star-entrance 1500ms; animation: star-entrance 1500ms; } .stars-out .star { transition: top 1500ms ease-out, left 1500ms ease-out; } .stars-out .star-1 { top: 75%; left: 6%; } .stars-out .star-2 { top: 35%; left: 88%; } .stars-out .star-3 { top: 8%; left: 20%; } .stars-out .star-4 { top: 70%; left: 92%; } .stars-out .star-5 { top: 35%; left: 4%; } .stars-out .star-6 { top: 2%; left: 70%; } .stars-out .star-1 { transition-delay: 0ms, 0ms; } .stars-out .star-1 .star-element { -webkit-animation-delay: 0ms; animation-delay: 0ms; } .stars-out .star-2 { transition-delay: 200ms, 200ms; } .stars-out .star-2 .star-element { -webkit-animation-delay: 200ms; animation-delay: 200ms; } .stars-out .star-3 { transition-delay: 400ms, 400ms; } .stars-out .star-3 .star-element { -webkit-animation-delay: 400ms; animation-delay: 400ms; } .stars-out .star-4 { transition-delay: 600ms, 600ms; } .stars-out .star-4 .star-element { -webkit-animation-delay: 600ms; animation-delay: 600ms; } .stars-out .star-5 { transition-delay: 800ms, 800ms; } .stars-out .star-5 .star-element { -webkit-animation-delay: 800ms; animation-delay: 800ms; } .stars-out .star-6 { transition-delay: 1000ms, 1000ms; } .stars-out .star-6 .star-element { -webkit-animation-delay: 1000ms; animation-delay: 1000ms; } .move-stars-in .star-element { -webkit-animation: star-exit 400ms linear; animation: star-exit 400ms linear; } .move-stars-in .star-1 .star-element { -webkit-animation-delay: 100ms; animation-delay: 100ms; } .move-stars-in .star-2 .star-element { -webkit-animation-delay: 150ms; animation-delay: 150ms; } .move-stars-in .star-3 .star-element { -webkit-animation-delay: 200ms; animation-delay: 200ms; } .move-stars-in .star-4 .star-element { -webkit-animation-delay: 250ms; animation-delay: 250ms; } .move-stars-in .star-5 .star-element { -webkit-animation-delay: 300ms; animation-delay: 300ms; } .move-stars-in .star-6 .star-element { -webkit-animation-delay: 350ms; animation-delay: 350ms; }
JavaScript
class Ghost { constructor(el) { this.scene = el; this.clone = el.cloneNode(true); this.isEscaping = false; this.ghost = el.querySelector('.ghost'); this.face = el.querySelector('.ghost-face'); this.eyes = el.querySelector('.eyes-row'); this.leftEye = this.eyes.querySelector('.left'); this.rightEye = this.eyes.querySelector('.right'); this.mouth = el.querySelector('.mouth'); this.mouthState = 'neutral'; this.shadow = el.querySelector('.shadow-container'); this.leftCheek = el.querySelector('.left.cheek'); this.leftCheek = el.querySelector('.right.cheek'); this.leftHand = el.querySelector('.hand-left'); this.rightHand = el.querySelector('.right-hand'); this.activityInterval = null; } reset() { this.scene.remove(); this.scene = this.clone.cloneNode(true); this.resetRefs(); this.scene.classList.remove('stars-out'); this.scene.style.position = 'absolute'; this.scene.style.left = Math.floor(Math.random() * (document.querySelector('body').getBoundingClientRect().width - 140)) + 'px'; this.scene.style.top = Math.floor(Math.random() * (document.querySelector('body').getBoundingClientRect().height - 160)) + 'px'; this.scene.classList.add('descend'); this.shadow.classList.add('disappear'); document.querySelector('body').append(this.scene); this.enter(); } resetRefs() { this.ghost = this.scene.querySelector('.ghost'); this.face = this.scene.querySelector('.ghost-face'); this.eyes = this.scene.querySelector('.eyes-row'); this.leftEye = this.eyes.querySelector('.left'); this.rightEye = this.eyes.querySelector('.right'); this.mouth = this.scene.querySelector('.mouth'); this.mouthState = 'neutral'; this.isEscaping = false; this.shadow = this.scene.querySelector('.shadow-container'); this.leftCheek = this.scene.querySelector('.left.cheek'); this.leftCheek = this.scene.querySelector('.right.cheek'); this.leftHand = this.scene.querySelector('.hand-left'); this.rightHand = this.scene.querySelector('.right-hand'); } blink() { this.leftEye.classList.add('blink'); this.rightEye.classList.add('blink'); setTimeout(() => { this.leftEye.classList.remove('blink'); this.rightEye.classList.remove('blink'); }, 50) } wave() { this.leftHand.classList.add('waving'); setTimeout(() => { this.leftHand.classList.remove('waving'); }, 500); } openMouth() { this.mouth.classList.remove('closed'); this.mouth.classList.add('open'); this.mouthState = 'open'; } closeMouth() { this.mouth.classList.remove('open'); this.mouth.classList.add('closed'); this.mouthState = 'closed'; } neutralMouth() { this.mouth.classList.remove('open'); this.mouth.classList.remove('closed'); this.mouthState = 'neutral'; } hover() { this.ghost.classList.add('hover'); } surprise() { this.face.classList.add('surprised'); } runAway() { clearInterval(this.activityInterval); if (!this.isEscaping) { this.isEscaping = true; this.scene.classList.add('run-away', 'move-stars-in'); this.scene.classList.remove('stars-out'); setTimeout(() => { this.shadow.classList.add('disappear'); setTimeout(() => { this.reset(); }, Math.floor(Math.random()*1000) + 500); }, 450); } } enter() { setTimeout(() => { this.shadow.classList.remove('disappear'); }, 5); setTimeout(() => { this.scene.classList.remove('descend'); this.scene.classList.add('stars-out', 'move-stars-out'); }, 600); setTimeout(() => { this.hover(); this.prepareEscape(); this.startActivity(); }, 1200) } startActivity() { this.activityInterval = setInterval(() => { switch (Math.floor(Math.random()*4)) { case 0: this.blink(); setTimeout(() => { this.blink() }, 400); setTimeout(() => { this.blink() }, 1300); break; case 1: this.wave(); break; default: break; } }, 7000); } prepareEscape() { this.scene.addEventListener('click', () => { this.runAway() }, false); this.scene.addEventListener('mouseover', () => { this.runAway() }, false); this.scene.addEventListener('focus', () => { this.runAway() }, false); } } let ghost = new Ghost(document.querySelector('.scene-container')); ghost.hover(); ghost.startActivity(); ghost.prepareEscape();
粒子
时间
文字
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号