JavaScript的mouse实践应用之跟随鼠标实时移动的提示框(选项卡)

  本文章要实现的就是下图所示效果,蓝色涂抹区域就是鼠标所在位置,图中的介绍信息提示框会跟随鼠标移动

 

  那么先来梳理一下思路,首先我们需要用到的事件有onmouseover‘(鼠标移入/经过)当鼠标经过的时候要触发提示框的显示效果,onmouseout(鼠标移出)鼠标离开a链接区域的时候要隐藏提示框,onmousemove(鼠标移动)当鼠标在a链接范围内移动时,提示框要跟随着鼠标一起移动

  那么如何实现对提示框的定位效果那?今天就用e.pageX和e.pageY来实现这个效果(e表示事件),如果上述事件或者属性你不认识,建议先去百度一下

 

emmmm,我的习惯就是先po出来html标签元素的代码,然后css样式最后JavaScript代码哦

 

  Html标签元素如下:

<body>
     <a href="#">唐太宗</a>
     <a href="#">武则天 </a>    
     <a href="#">李治</a>
    <a href="#">李弘</a>
   <div id="msg"></div>    //这时候你可能疑惑msg里面怎么没有信息,对就是没有信息,我们要通过JavaScript对信息进行遍历添加,减少代码量,提升质量
</body>
 
  Css样式如下(关键样式我会备注,不关键的可以自己随意设置)
 
 
<style>
        a{
            margin: 0 100px;
            font-size: 36px;
        }
        #msg{
            color: white;
            height: 100px;
            width: 500px;
            background: rgba(0, 0, 0, 0.5);  
            position: absolute;  //这个不能少,而且当前msg所对应的div标签没有拥有定位属性的父元素,所以基于html页面
            display: none;    //默认msg为不显示
        }
</style>
 
 
  Script代码如下
 
<script>

        var arr = ["李世民(598年1月28日或599年1月23日—649年7月10日),陇西狄道(今甘肃省临洮县)人。唐朝第二位皇帝(626—649年在位),政治家、战略家、军事家、诗人。",
        "武则天 武曌[zhào] [1]  (624年-705年12月16日 [2]  ),即武则天,并州文水(今山西文水)人。唐朝至武周时期政治家,武周开国君主(690年-705年在位),也是中国历史上唯一的正统女皇帝、即位年龄最大(67岁)及寿命最长的皇帝之一(82岁)。",
        "李治 ,唐高宗李治(628年7月21日 [1-2]  -683年12月27日 [3]  ),字为善,唐朝第三位皇帝(649年7月15日-683年12月27日在位),唐太宗李世民第九子,母为文德顺圣皇后长孙氏,太子李承乾、魏王李泰同母弟。",
        "李弘(653~675年),陇西成纪(今甘肃省秦安县)人。 [1]  唐高宗李治第五子,一代女皇武则天长子,唐朝第一位死后追封皇帝的太子。"];
      
                          //定义一个arr来存放提示信息,每一个提示信息都是一个数组元素,使用for循环动态添加
 
        window.onload = function (){
            var oMsg = document.getElementById("msg");    //使用id来获取msg对应的div元素,返回一个对象
            var aAs = document.getElementsByTagName("a");    //使用tagname来获取页面上所有的a元素,返回一个数组
            
            for (let i = 0; i < aAs.length; i++) {    //使用for循环动态给a链接添加三个鼠标事件
                aAs[i].onmouseover = function(){
                    oMsg.style.display = "block";  //鼠标经过状态为显示
                    oMsg.innerHTML = arr[i];      //给msg提示框填充信息
                }
                aAs[i].onmouseout = function(){
                    oMsg.style.display = "none";    //鼠标离开状态为隐藏
                }
                aAs[i].onmousemove = function(ev){  //要使用鼠标事件对象的属性,首先要有一个鼠标对象,系统会自动获取鼠标对象并且传入,定义一个形参来接收即可
                    var e = ev || window.event;    //IE8以下不兼容鼠标对象,但支持window.event,所以要避免这种情况的话就使用“||”事件的短路操作,给变量e赋成一个鼠标对象
                    oMsg.style.left = e.pageX + 5 + "px";  //e.clientX是基于Html页面的左上角为原点,返回X轴对应的像素,返回类型为number,所以要拼接一个"px"来赋一个单位
                         //至于加这个5是干嘛的?其实也很好理解,你把5去掉试试,是不是显示就有点不太正常,因为在鼠标移动的时候msg的层级属于定位元素,所以比a链接的层级要高,所以你鼠标一移动,鼠标就会在msg元素上而不在a元素上,但我们给a元素设置如果鼠标不在a元素上就要把msg元素给隐藏,所以就这样造成msg显示不正常的情况,这时我们要给msg的定位加上几个像素值进行定位偏离,这样提示框不仅可以跟随鼠标实时移动而且显示也没有问题了
 
                    oMsg.style.top = e.pageY + 5 + "px";
                }
            }
        }
    </script>
posted @ 2020-11-05 09:17  丨树街猫  阅读(500)  评论(0编辑  收藏  举报