1. 程式人生 > >判斷滑鼠移入方向

判斷滑鼠移入方向

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <link rel="stylesheet"
href="./css/index.css"> </head> <body> <div class="container wrap clearfix"> <ul class="clearfix"> <li class="outer"><img src="./img/timg4.jpg" alt=""> <div class="back"><img src="./img/cp1.jpg" alt=""></div> </
li> <li class="outer"><img src="./img/timg5.jpg" alt=""> <div class="back"><img src="./img/cp2.jpg" alt=""></div> </li> <li class="outer"><img src="./img/timg6.jpg" alt=""> <div class="back"
><img src="./img/cp3.jpg" alt=""></div> </li> <li class="outer"><img src="./img/timg7.jpg" alt=""> <div class="back"><img src="./img/cp4.jpg" alt=""></div> </li> <li class="outer"><img src="./img/timg8.jpg" alt=""> <div class="back"><img src="./img/cp5.jpg" alt=""></div> </li> <li class="outer"><img src="./img/timg9.jpg" alt=""> <div class="back"><img src="./img/cp6.jpg" alt=""></div> </li> </ul> </div> <script src="./js/index.js"></script> </body> </html>
*{
    margin: 0;
    padding:0;
    list-style:none;
}
.wrap{
    margin-top: 200px;
    width: 680px;
}
.wrap ul{
    padding: 10px;
}
.wrap ul li{
    position: relative;
    float: left;
    width: 200px;
    height: 200px;
    z-index: 1;
    margin: 10px;
    overflow: hidden;
    
}
.wrap ul li div{
    position: absolute;
    top: 0px;
    left: 0px;
    width: 200px;
    z-index: -1;
    height: 200px;
    transition: transform 0.3s;
    transform-origin: left bottom;    
    transform: rotateZ(-90deg);
}
.wrap ul img{
    width: 100%;
    height: 100%;
}
.wrap ul li div.back_left{
    transform: rotateZ(0deg);
    z-index: 2;
}
.wrap ul li div.back_right{
    transform-origin: right top;
    transform: rotateZ(0deg);
    z-index: 2;
}
.wrap ul li div.back_top{
    transform-origin: left top;
    transform: rotateZ(0deg);
    z-index: 2;
}
.wrap ul li div.back_bottom{
    transform-origin: right bottom;
    transform: rotateZ(0deg);
    z-index: 2;
}
/* 去浮動 */
.clearfix::before, .clearfix::after{
    content: ".";
    height: 0;
    line-height: 0;
    display: block;
    visibility: hidden;
    clear: both;
}
.clearfix::after{clear: both;}
.clearfix{
     *zoom: 1;/*IE/7/6 */
}
// 獲取滑鼠在頁面中的位置,處理瀏覽器相容性
function getPage(e) {
    var pageX = e.pageX || e.clientX + getScroll().scrollLeft;
    var pageY = e.pageY || e.clientY + getScroll().scrollTop;
    return {
        pageX: pageX,
        pageY: pageY
    }
};

var wrap = document.getElementsByClassName('wrap')[0];
var oUl = wrap.getElementsByTagName('ul')[0];
var aLi = oUl.getElementsByTagName('li');
var newAli = Array.prototype.slice.call(aLi);
newAli.forEach(function (index) {
    index.onmouseenter = direction ;
});
function direction (e) {
    e = e || window.event;
    var x;
    var y;
    // 滑鼠位置是否小於當前li的一半,如果小於  用滑鼠位置減去li的位置,如果不小於,用滑鼠位置減去li位置再減去li的大小
    // 當滑鼠經過li時,x軸y軸必有大小,最小的值就是滑鼠移入的方向
    x = Math.abs(getPage(e).pageX - this.offsetLeft) > this.offsetWidth / 2 ? getPage(e).pageX - this.offsetLeft - this.offsetWidth : getPage(e).pageX - this.offsetLeft;
    y = Math.abs(getPage(e).pageY - this.offsetTop) > this.offsetHeight / 2 ? getPage(e).pageY - this.offsetTop - this.offsetHeight : getPage(e).pageY - this.offsetTop;
    var oDiv = this.getElementsByTagName('div')[0];
    // 如果滑鼠x軸位置減去li的位置小於li寬度的一半,證明滑鼠位置在li的左側,此時比較x與y的大小,小的就是滑鼠移入的方向
    if (Math.abs(getPage(e).pageX - this.offsetLeft) < this.offsetWidth / 2 && Math.abs(x) <= Math.abs(y)) {
        oDiv.classList.add('back_left');
    }
    // 如果滑鼠x軸位置減去li位置大於li寬度的一半,證明滑鼠在li的右側,此時比較x與y的大小,小的就是滑鼠移入的方向
    if (Math.abs(getPage(e).pageX - this.offsetLeft) > this.offsetWidth / 2 && Math.abs(x) <= Math.abs(y)) {
        oDiv.classList.add('back_right');
    }
    // 如果滑鼠y軸位置減去li的位置大於li高度的一半,證明滑鼠在li的下方,此時比較x與y的大小,小的就是滑鼠移入的方向
    if (Math.abs(getPage(e).pageY - this.offsetTop) > this.offsetHeight / 2 && Math.abs(x) >= Math.abs(y)) {
        oDiv.classList.add('back_bottom');
    }
    // 如果滑鼠y軸位置減去li的位置小於li高度的一半,證明滑鼠在li的上方,此時比較x與y的大小,小的就是滑鼠移入的方向
    if (Math.abs(getPage(e).pageY - this.offsetTop) < this.offsetHeight / 2 && Math.abs(x) >= Math.abs(y)) {
        oDiv.classList.add('back_top');
    }
    this.onmouseleave = function () {
        oDiv.className = 'back';
    }
}