首页 > 其他 > 详细

解决同层hover事件重叠闪烁问题

时间:2020-04-08 12:22:13      阅读:147      评论:0      收藏:0      [点我收藏+]

完整代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <script src="js/jquery.min.js"></script>
  <style>
    .smallbox{
      width:20px;
      height:20px;
      text-align: center;
      background:#333;
      /* position:absolute; */
      /* left:25px; */
      /* top:25px; */
      margin:5px;
      display: none;
    }
    .bigbox{
      width:150px;
      height:150px;
      background:#000000;
      margin: 10px;
      opacity: .1;
    }
    .pop{
      width: 150px;
      height: 150px;
      background: red;
      position: absolute;
      right: 0px;
      top: 0px;
      display: none;
    }
    .active{
      display: block;
    }
    .smallbox span{
      display: block;
      width: 100%;
      height: 100%;
      cursor: pointer;
    }
  </style>
</head>
<body>
  <div class="pop"></div>
  <div class="bigbox" key=‘A‘></div>
  <div class="bigbox" key=‘B‘></div>
  <div class="bigbox" key=‘C‘></div>
  <div class="smallbox" key="1" style="position: absolute;left: 25px; top: 25px;"><span></span></div>
  <div class="smallbox" key="2" style="position: absolute;left: 50px; top: 40px;"><span></span></div>
  <div class="smallbox" key="3" style="position: absolute;left: 80px; top: 220px;"><span></span></div>
  <div class="smallbox" key="4" style="position: absolute;left: 120px; top: 180px;"><span></span></div>
  <div class="smallbox" key="5" style="position: absolute;left: 80px; top: 80px;"><span></span></div>
  <div class="smallbox" key="6" style="position: absolute;left: 120px; top: 350px;"><span></span></div>
  <div class="smallbox" key="7" style="position: absolute;left: 80px; top: 370px;"><span></span></div>

    <script>
          $(document).ready(
        
                  function(){
                      const arceObj={A:[5,1,2],B:[3,4],C:[6,7]}
                      let arceDom={}
                      // 当前所在热区
                      let arceKey=‘‘
                      $(".bigbox").mouseover(
                              function(e){
                                  // 判断是哪个热区
                                  arceKey=$(e.target).attr(key)
                                  arceDom=e.target
                                  const arr =$(.smallbox)
                                  //console.log(arr)
                                  // 遍历这个数组  找出该热区下应该显示的小热区
                                  arr.each(function(item){
                                  const key=$(arr[item]).attr(key)
                                        //console.log(key);
                                      // 找到之后将这些smallbox元素显示
                                      if($.inArray(key,arceObj[arceKey]) !=-1){//判断arceObj数组里是否存在key
                                         $(arr[item]).show()
                                      }
                                  });
                                  $(this).css("opacity","1")
                              }
                      );

                      $(".smallbox").mouseover(
                              function(e){
                                  $(arceDom).css("opacity","1")
                                  // const arce=$(e.target).attr(‘key‘)
                                  // console.log(arce)
                                  // 当前元素的所有兄弟元素  可修改样式
                                  // $(e.target).siblings()
                                  const arr =$(.smallbox)
                                  // 遍历这个数组  找出该热区下应该显示的小热区
                                  arr.each(function(item){
                                      const key=$(arr[item]).attr(key)
                                      // 找到之后将这些smallbox元素显示
                                      if(arceObj[arceKey].indexOf(key)!=-1){
                                         $(arr[item]).show()
                                      }
                                  });
                             }
                      );
      
                      // 反向找到当前小热区所在的大热区 key为小热区的key
                      function getArcekey(key){
                        for(var akey in arceObj){
                          for(var i=0;i<arceObj[akey].length;i++){
                            // 如果找到相同的key返回大热区的key
                            if(arceObj[akey][i]==key){
                              return akey
                            }
                          }
                        }
                      }

                      $(".bigbox").mouseout(
                              function(e){
                                  $(".smallbox").hide();
                                  $(this).css("opacity",".1")
                              }
                      );                 
                    
                    $(".smallbox span").hover(function(){
                            $(".pop").addClass("active")

                    },function(){
                            $(".pop").removeClass("active")
                    });



                  }
          );
      
      </script>
</body>
</html>

 效果图:

技术分享图片

 

解决同层hover事件重叠闪烁问题

原文:https://www.cnblogs.com/smedas/p/12659035.html

(1)
(1)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!