判断鼠标移入方向

<!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‘;
    }
}

原文地址:https://www.cnblogs.com/hiteme/p/9975627.html

时间: 2024-10-10 08:12:17

判断鼠标移入方向的相关文章

判断鼠标移入移出元素时的方向

本文要介绍的是一种鼠标从一个元素移入移出时,获取鼠标移动方向的思路.这个方法可以帮助你判断鼠标在移入移出时,是从上下左右的哪个方向发生的.这个思路,是我自己琢磨出来,利用了一点曾经高中学过的数学知识,但是非常简单好理解,希望能对你有所帮助. 在线demo: http://liuyunzhuge.github.io/blog/mouse_direction/demo1.html 相关代码: https://github.com/liuyunzhuge/blog/blob/master/mouse_

js中判断鼠标滚轮方向的方法

  前  言 LiuDaP 最近无聊,在做自己的个人站,其中用到了一个关于鼠标滚轮方向判断的方法,今天闲来无聊,就给大家介绍一下吧!!!! 在介绍鼠标事件案例前,让我们先稍微了解一下js中的event对象 一.JS中的Event对象 Event对象:它代表的是事件的状态,例如可以表示鼠标的位置.鼠标按钮的状态.键盘按键的状态等等. >>>事件通常与函数结合使用,函数不会在事件发生前被执行! 二.JS中如何判断鼠标滚轮方向 判断鼠标滚轮的方向,有着两个派别:一是谷歌.IE派别(这次IE没有

关于js判断鼠标移入元素的方向——上下左右

一开始我是这么想的,将待移入的元素分割四块,用mousemove获取第一次鼠标落入的区域来判断鼠标是从哪个方向进去的. 所以只要写个算法来判断鼠标的值落入该元素的区域就可以得出鼠标移入的方向,如下图: 对于数学不太好的我,只能上网找下看有没有人解决了.找到了如下这段: var x = (e.pageX - this.offsetLeft - (w / 2)) * (w > h ? (h / w) : 1); var y = (e.pageY - this.offsetTop - (h / 2))

JS判断鼠标移入元素的方向

最终效果 这里的关键主要是判断鼠标是从哪个方向进入和离开的 $("li").on("mouseenter mouseleave",function(e) { var w = this.offsetWidth; var h = this.offsetHeight; var x = e.pageX - this.getBoundingClientRect().left - w/2; var y = e.pageY - this.getBoundingClientRect

判断鼠标移入移出方向设置

原理:以div容器的中心点作为圆心,以高和宽的最小值作为直径画圆,将圆以[π/4,3π/4),[3π/4,5π/4),[5π/4,7π /4),[-π/4,π/4)划分为四个象限,鼠标进入容器时的点的atan2(y,x)值在这四个象限里分别对应容器边框的下,右,上,左.如下图所示 Js代码 var x = (e.pageX - this.offsetLeft - (w / 2)) * (w > h ? (h / w) : 1); 计算x坐标值时,如果点原来的x坐标的绝对值大于圆的半径值,则按 h

判断鼠标移入元素方向

$(this).bind("mouseenter mouseleave",function(e){ var w = $(this).width(); var h = $(this).height(); var x = (e.pageX - $(this).offset().left - (w / 2)) * (w > h ? (h / w) : 1); var y = (e.pageY - $(this).offset().top - (h / 2)) * (h > w ?

js 判断鼠标滚轮方向

最近因为公司项目的要求,需要做页面的全屏滚动切换效果. 页面的切换,需要脚本监听鼠标滑轮的滚动事件,来判断页面是向上切换or向下切换. 这里的脚本很简单,我就直接贴出来吧. 1 $('html').on('mousewheel DOMMouseScroll', function (e) { 2 e.preventDefault(); 3 var t = new Date().getTime(); 4 //防止鼠标滚动太快 5 if (t - Const.scrollTime < 1400) {

js判断鼠标滚动方向

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> <head> <meta h

JS实现穿墙效果(判断鼠标划入划出的方向)

<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title>判断鼠标移入移出方向</title> <style type="text/css"> * { margin: 0; padding: 0; } .outer { width: 400px; height: 400px; bor