跟随鼠标移动的遮罩层

判断鼠标移入方向,主要是根据鼠标的移入斜率 k ,当-k<k1<k时,从左右移入,X>X0右侧移入,X<X0左侧移入;否则从上下移入,Y>Y0从底部移入,Y>Y0从顶部移入。

if(-k<k1 && k1<k){
  if(pointX > x0){
    dir = "right";
  }else{
     dir = "left"
   }
}else{
   if(pointY > y0){
     dir = "bottom";
   }else{
       dir = "top";
   }
}

HTML:

<div id="box"></div>

JS:

  var t = $("#box").offset().top,   //top
    l = $("#box").offset().left,//left
    w = $("#box").width(),       //width
    h = $("#box").height(),      //height
    x0 = l + w / 2,
    y0 = t + h / 2,
    y1 = t,x1 = l,
    y2 = t + h,x2 = l + w,
    k = (y2 - y0) / (x2 - x0),
    k1,k2,dir,pointX,pointY,outX,outY;
  console.log(k);
  $("#box").append(‘<div class="mask"></div>‘)
  $("#box").mouseenter(function(e){
    pointX = e.pageX;
    pointY = e.pageY;
    k1 = (pointY - y0) / (pointX - x0);
    console.log(k1);
    if(-k<k1 && k1<k){
      if(pointX > x0){
        dir = "right";
      }else{
        dir = "left"
      }
    }else{
      if(pointY > y0){
        dir = "bottom";
      }else{
        dir = "top";
      }
    }
    switch(dir){
      case "top":
        console.log("top");
        $(this).find(".mask").css({left:0,top:-h+"px"});
        break;
      case "right":
        console.log("right");
        $(this).find(".mask").css({top:0,left:w+"px"});
        break;
      case "bottom":
        console.log("bottom");
        $(this).find(".mask").css({left:0,top:h+"px"});
        break;
      case "left":
        console.log("left");
        $(this).find(".mask").css({top:0,left:-w+"px"});
        break;
      default:
        break;
    }
    $(this).find(".mask").stop(false,true).animate({top:0,left:0},1000);
  }).mouseleave(function(e){
    outX = e.pageX;
    outY = e.pageY;
    k2 = (outY - y0) / (outX - x0);
    if(-k<k2 && k2<k){
      if(outX > x0){
        dir = "right";
      }else{
        dir = "left"
      }
    }else{
      if(outY > y0){
        dir = "bottom";
      }else{
        dir = "top";
      }
    }
    switch(dir){
      case "top":
        console.log("top");
        $(this).find(".mask").animate({top:-h+"px",left:0},1000);
        break;
      case "right":
        console.log("right");
        $(this).find(".mask").animate({top:0,left:w+"px"},1000);
        break;
      case "bottom":
        console.log("bottom");
        $(this).find(".mask").animate({top:h+"px",left:0},1000);
        break;
      case "left":
        console.log("left");
        $(this).find(".mask").animate({top:0,left:-w+"px"},1000);
        break;
      default:
        break;
    }
  });

浏览效果

上边用到了一个stop事件,stop是jQuery中用于控制页面动画效果的方法。运行之后立即结束当前页面上的动画效果。

stop在新版jQuery中添加了2个参数:

第一个参数的意思是是否清空动画序列,也就是stop的是当前元素的动画效果还是停止后面附带的所有动画效果,一般为false,跳过当前动画效果,执行下一个动画效果;

第二个参数是是否将当前动画效果执行到最后,意思就是停止当前动画的时候动画效果刚刚执行了一般,这个时候想要的是动画执行之后的效果,那么这个参数就为true。否则动画效果就会停在stop执行的时候。

时间: 2024-10-08 18:42:35

跟随鼠标移动的遮罩层的相关文章

鼠标悬浮弹出跟随鼠标移动的带箭头的信息层

鼠标悬浮弹出跟随鼠标移动的带箭头的信息层:很多网站,当鼠标悬浮在一个元素上的时候能够弹出一个信息说明层,并且此层能够跟随鼠标移动,同时弹出的层带有箭头,此箭头指向鼠标悬浮的元素,下面就通过实例代码简单介绍一下如何实现此效果.代码实例如下: <!DOCTYPE html> <html><head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"

简单的CSS3鼠标滑过图片标题和遮罩层动画特效

这是一款使用CSS3制作的简单的鼠标滑过图片标题和遮罩层动画特效.该鼠标滑过特效通过 CSS3transitions 和 transform 属性,在鼠标滑过图片时制作遮罩层和图片标题动画效果. 在线预览   源码下载 使用方法 HTML结构 该鼠标滑过图片特效的HTML结构非常简单:使用一个<div>元素作为图片遮罩层,在里面放置图片的描述信息. 1 2 3 4 5 6 7 8 <img src="img/01.jpg" alt=""> &

12种炫酷的CSS3鼠标滑过图片遮罩层动画特效

InContent是一款效果非常炫酷的CSS3鼠标滑过图片遮罩层动画特效.这组特效共有12种不同的鼠标滑过图片效果,分为滑动.旋转和翻转3大类.它可以在支持CSS3 transition和transform属性的现代浏览器中正常工作. 在线预览   源码下载 使用方法 使用该CSS3鼠标滑过图片遮罩层动画特效需要在页面中引入由SASS编译的sass-compiled.css文件或由LESS编译的less-compiled.css文件. <link rel="stylesheet"

简单实用的鼠标滑过图片遮罩层动画jQuery插件

nsHover是一款简单实用的鼠标滑过图片遮罩层动画jQuery插件.该插件可以在图片或块级元素上制作鼠标滑过时的遮罩层动画效果,它可以设置遮罩层的前景色和背景色,可以制作圆形图片等,非常实用. 在线预览   源码下载 使用方法 使用该鼠标滑过插件需要引入jQuery和ns.hover.min.js文件. 1 2 <script src="js/jquery.min.js"></script> <script src="js/ns.hover.m

C#使用Windows API实现桌面上的遮罩层(鼠标穿透)

C#实现实现桌面上的遮罩层(鼠标穿透)主要通过一下几个API函数来实现:GetWindowLong,SetWindowLong,SetLayeredWindowAttributes.其中有一个Windows 消息 WS_EX_TRANSPARENT 比较重要,它实现了鼠标穿透的功能. 下面来看看完整的实现代码: using System; using System.Drawing; using System.Windows.Forms; using System.Runtime.InteropS

跟随屏幕滚动层、遮罩层、获取Div相对定位、整个屏幕、html文档的jquery基本操作

一.层跟随屏幕滚动 <div style="width:120px;height:120px;border:1px solid red; position:absolute; left:800px; top:100px; z-index:1001;" id="AdminUserStateDiv">                </div>        <div class="div1">层1</div

遮罩层特效(根据鼠标进入离开方向出现)

<!doctype html><html><head><meta charset="utf-8"><title>遮罩层特效(根据鼠标进入离开方向出现)</title><script src="../../js/jquery-1.7.2.js"></script><script>$(function(){ var $li=$(".wrap>ul&

转【js &amp; jquery】遮罩层实现禁止a、span、button等元素的鼠标事件

/*遮罩层代码 作用:通过遮罩层的方式防止表单提交次数过多 */ function MaskIt(obj){ var hoverdiv = '<div class="divMask" style="position: absolute; width: 100%; height: 100%; left: 0px; top: 0px; background: #fff; opacity: 0; filter: alpha(opacity=0);z-index:5;"

【js &amp; jquery】遮罩层实现禁止a、span、button等元素的鼠标事件

刚才在写一个界面,其中为了考虑背景图片的缘故,所以没用Button而是用的a标签 在点击之后应该禁用掉a元素,禁用对于button比较容易,加一个disabled就可以了 但是对于a却没有太好的办法,总不能把href="",更何况我是走的onclick函数 所以百度了一下,然后看到有用遮罩实现的,源代码有bug,然后按照它的思路自己重写了一下 --------- 下面粘一下代码吧,这个遮罩层实现法其实就是在当前元素外wrap一个层,层内增加一个z-index比较大的透明层,直接罩住原来