<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>可爱的面孔</title>
<style>
:root {
--eye-height: 32px;
--left-eye-x: 50px;
--right-eye-x: 150px;
}
body {
display: flex;
align-items: center;
justify-content: center;
height: 100vh;
width: 100%;
background-color: hsl(100, 50%, 50%)
}
.blob {
height: 150px;
width: 235px;
background-color: hsl(100, 50%, 80%);
position: relative;
border-radius: 25px;
box-shadow: 5px 5px 10px hsl(100, 50%, 35%);
cursor: pointer;
border: 5px solid black;
}
.blob * {
position: absolute;
}
.eyes {
top: var(--eye-height);
transition: 0.10s;
}
.mouth, .eye {
background-color: hsl(0, 0%, 25%);
}
.eye {
position: absolute;
height: 30px;
width: 30px;
border-radius: 100%;
transition: 0.10s;
}
.left-eye {
left: var(--left-eye-x);
}
.right-eye {
left: var(--right-eye-x);
}
.mouth {
top: 90px;
height: 20px;
width: 60px;
left: 85px;
border-radius: 0 0 100% 100%;
}
.blob:hover .eye {
height: 5px;
border-radius: 0;
}
.blob:hover .eyes {
top: 45px;
}
.blob.look-up .eyes {
top: calc(var(--eye-height) - 8px);
}
.blob.look-down .eyes {
top: calc(var(--eye-height) + 10px)
}
.blob.look-left .left-eye {
left: calc(var(--left-eye-x) - 10px);
}
.blob.look-left .right-eye {
left: calc(var(--right-eye-x) - 10px);
}
.blob.look-right .left-eye {
left: calc(var(--left-eye-x) + 10px);
}
.blob.look-right .right-eye {
left: calc(var(--right-eye-x) + 10px);
}</style>
</head>
<body>
<div class="blob animated">
<div class="eyes">
<div class="eye left-eye"></div>
<div class="eye right-eye"></div>
</div>
<div class="mouth"></div>
</div>
<script>
/*
How can geometry
bear affection?
It's the purest love:
projection.
*/
const animationType = 'headShake'
const blob = document.querySelectorAll('.blob')[0];
const body = document.getElementsByTagName('body')[0];
blob.addEventListener('mouseenter', () => {
blob.classList.add(animationType);
});
blob.addEventListener('mouseleave', () => {
blob.classList.remove(animationType);
});
body.addEventListener('mousemove', (e) => {
if (e.clientY < blob.offsetHeight) {
blob.classList.add('look-up');
} else {
blob.classList.remove('look-up');
}
if (e.clientY > (blob.offsetHeight + 150)) {
blob.classList.add('look-down');
} else {
blob.classList.remove('look-down');
}
if (e.clientX < (blob.offsetLeft)) {
blob.classList.add('look-left');
} else {
blob.classList.remove('look-left');
}
if (e.clientX > (blob.offsetLeft + 235)) {
blob.classList.add('look-right');
} else {
blob.classList.remove('look-right');
}
});</script>
</body>
</html>