CSS版
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>qdabc.cn</title>
<style>
body {
padding: 2em;
font: 16px/1.5 "Helvetica Neue", Arial, sans-serif;
text-align: center;
}
.block {
position: relative;
display: inline-block;
overflow:hidden;
width: 10em;
height: 10em;
vertical-align: middle;
-webkit-transform: translateZ(0);
}
.block_hoverer {
position: absolute;
z-index: 1;
width: 100%;
height: 100%;
opacity: 0;
transition: all .3s ease;
}
.block_hoverer:nth-child(1) {
background: red;
top:-90%;
}
.block_hoverer:nth-child(2) {
background: lime;
top:90%;
}
.block_hoverer:nth-child(3) {
background: orange;
left:-90%;
}
.block_hoverer:nth-child(4) {
background: blue;
left:90%;
}
.block_hoverer:hover {
opacity:1;
top:0;
left:0;
}
.block_content {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
text-align: center;
line-height: 10em;
background: #333;
color: #FFF;
}
</style>
</head>
<body>
<p class="text">从不同方向使鼠标指针移过下面的内容</p>
<p>↓</p>
<span>→ </span>
<div class="block">
<div class="block_hoverer">1</div>
<div class="block_hoverer">2</div>
<div class="block_hoverer">3</div>
<div class="block_hoverer">4</div>
<div class="block_content">
Hover me!
</div>
</div>
<span> ←</span>
<p>↑</p>
<script>
'use strict';
</script>
</body>
</html>
JS版
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>qdabc.cn</title>
<style>
.block {
margin: 300px 400px;
width: 300px;
height: 300px;
border: 1px solid;
position: absolute;
overflow: hidden;
}
.move-box {
width: 300px;
height: 300px;
background: #ABD8DE;
position: absolute;
left: 0;
top: 300px;
}
</style>
</head>
<body>
<div class="block">
<div class="move-box"></div>
</div>
<script>
'use strict';
var Block = document.querySelector('.block');
var Boxes = document.querySelector('.move-box');
function css(obj, attr){
if(obj.currentStyle){
return obj.currentStyle[attr];
} else {
return getComputedStyle(obj, null)[attr];
}
}
function act(obj, attr, target, fn){
obj.timer && clearInterval(obj.timer);
obj.timer = setInterval(function(){
var cur = parseInt(css(obj, attr));
var speed = (target - cur) / 8;
speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);
var stop = true;
if(cur != target){
stop = false
obj.style[attr] = cur + speed + 'px';
}
if(stop){
clearInterval(obj.timer);
obj.timer = null;
fn && fn();
}
}, 10);
}
function GetPos (ev, el) {
var evt = ev || event;
var x = evt.clientX - (el.offsetLeft + el.offsetWidth/2);
var y = evt.clientY - (el.offsetTop + el.offsetHeight/2);
return Math.round((((Math.atan2(y, x) * (180 / Math.PI)) + 180) / 90) + 3) % 4;
}
Block.addEventListener('mouseenter',function(ev){
switch (GetPos(ev,Block)) {
case 0:
console.log('上');
Boxes.style.left = 0 + 'px';
Boxes.style.top = -300 + 'px';
act(Boxes, 'top', 0);
break;
case 1:
console.log('右');
Boxes.style.left = 300 + 'px';
Boxes.style.top = 0 + 'px';
act(Boxes, 'left', 0);
break;
case 2:
console.log('下');
Boxes.style.left = 0 + 'px';
Boxes.style.top = 300 + 'px';
act(Boxes, 'top', 0);
break;
case 3:
console.log('左');
Boxes.style.left = -300 + 'px';
Boxes.style.top = 0 + 'px';
act(Boxes, 'left', 0);
break;
}
},false);
Block.addEventListener('mouseleave',function(ev){
Boxes.style.left = 0 + 'px';
Boxes.style.top = 0 + 'px';
switch (GetPos(ev,Block)) {
case 0:
console.log('上');
act(Boxes, 'top', -300);
break;
case 1:
console.log('右');
act(Boxes, 'left', 300);
break;
case 2:
console.log('下');
act(Boxes, 'top', 300);
break;
case 3:
console.log('左');
act(Boxes, 'left', -300);
break;
}
},false);
</script>
</body>
</html>
欢迎分享本文,转载请保留出处:前端ABC » CSS跟JS版的判断鼠标移入移出位置
前端ABC