爱程序网

鼠标悬停出现大图并跟随鼠标指针移动

来源: 阅读:

鼠标悬停出现大图并跟随鼠标指针移动:
在一些具有图片列表的网站中,当鼠标放在小图上的时候能够弹出一个大图,并且当鼠标在图片上移动的时候,大图也能够随着鼠标指针运动,非常的人性化,也提高了网站的动态化效果,下面简单介绍一下如何实现此效果:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>jQuery的鼠标悬停时放大图片的效果制作</title>
<style>
* {
  margin:0;
  padding:0;
}
img{
  vertical-align:bottom;
  border:none;
}
body{
  background:#f0f0f0;
  height:800px;
  font-family:Arial;
}
ul {
  list-style:none;
}
h1{
  font-size:20px;
  width:680px;
  margin:3% auto 5px;
  color:#202020;
}
ul#gallery{
  width:660px;
  margin:0 auto 10px;
  padding-left:20px;
  border:1px solid #d3d3d3;
  background:#fff;
  overflow:hidden;
}
ul#gallery li{
  width:200px;
  height:200px;
  float:left;
  margin:20px 20px 20px 0;
  display:inline;
}
ul#gallery li a.smallimage{
  background:#333;
  display:block;
  width:200px;
  height:200px;
}
#bigimage{
  position:absolute;
  display:none;
}
#bigimage img{
  width:400px;
  height:400px;
  padding:5px;
  background:#fff;
  border:1px solid #e3e3e3;
}
</style>
<script type="text/javascript" src="mytest/jQuery/jquery-1.8.3.js"></script>
<script type="text/javascript">
$(function(){ 
  var x = 22;
  var y = 20;
   
  $("a.smallimage").hover(function(e){
    $("body").append('<p id="bigimage"><img src="'+ this.rel + '" alt="" /></p>');
    $(this).find('img').stop().fadeTo('slow',0.5);  
    widthJudge(e);
    $("#bigimage").fadeIn('fast');
  },function(){
    $(this).find('img').stop().fadeTo('slow',1);
    $("#bigimage").remove();
  }); 
  $("a.smallimage").mousemove(function(e){
    widthJudge(e);
  }); 
  function widthJudge(e){
    var marginRight = document.documentElement.clientWidth - e.pageX; 
    var imageWidth = $("#bigimage").width();
    if(marginRight < imageWidth){
      x = imageWidth + 22;
      $("#bigimage").css({top:(e.pageY - y ) + 'px',left:(e.pageX - x ) + 'px'}); 
    }
   else{
      x = 22;
      $("#bigimage").css({top:(e.pageY - y ) + 'px',left:(e.pageX + x ) + 'px'});
    }; 
  }
})
</script>
</head>
<body>
<ul id="gallery">
<li>
  <a href="#" class="smallimage" rel="mytest/code/726/images/001_big.jpg">
   <img src="mytest/code/726/images/001_small.jpg" alt="" />
  </a>
</li>
<li>
<a href="#" class="smallimage" rel="mytest/code/726/images/002_big.jpg">
  <img src="mytest/code/726/images/002_small.jpg" alt="" />
</a>
</li>
<li>
<a href="#" class="smallimage" rel="mytest/code/726/images/003_big.jpg">
  <img src="mytest/code/726/images/003_small.jpg" alt="" />
</a>
</li>
</ul>
</body>
</html>

代码实现了效果,当鼠标放在图片上的时候可以出现大图,当鼠标在小图中移动时,大图也会跟随者鼠标指针运动。
下面简单介绍一下实现此效果的过程:
一.实现原理:
当鼠标放在图片上的时候就会触发小图的hover事件,hover事件的处理函数可以为body添加p元素以控制大图的显示并且调用widthJudge()函数用以控制大图的坐标位置,当鼠标离开的时候会移除添加的p元素使大图消失。当鼠标在小图中移动的时候会触发小图的mousemove事件,此事件处理函数可以调用widthJudge()函数用以控制大图的坐标。
二.代码注释:
1.$(function(){},规定当文档结构完全加载完成时再去执行函数中的代码。
2.var x = 22和var y = 20用来规定鼠标指针距离大图的距离。
3.$("a.smallimage").hover(function(e){},为小图绑定hover事件处理函数。关于hover事件可以参阅 jQuery的hover事件
4.$("body").append('<p id="bigimage"><img src="'+ this.rel + '" alt="" /></p>"),用于添加一个p元素,p中的图片即是要显示的大图。大图的src属性值是当前小图的rel属性值。
5.$(this).find('img').stop().fadeTo('slow',0.5),将小图设置为半透明。
6.$("#bigimage").fadeIn('fast')显示图片。
7.$(this).find('img').stop().fadeTo('slow',1)将小图恢复原样。
8.$("#bigimage").remove(),移除添加的p元素,也就是隐藏大图。
9.$("a.smallimage").mousemove(function(e){},为小图绑定mousemove事件处理函数以此调用widthJudge()函数。关于mousemove函数可以参阅jQuery的mousemove事件
10.function widthJudge(e){},此事件用于控制图片的位置,e是事件对象。
11.var marginRight = document.documentElement.clientWidth - e.pageX,用来计算鼠标指针右半部可见区域的尺寸。
12.var imageWidth = $("#bigimage").width(),用来获得大图的宽度。
13.if(marginRight < imageWidth)用来判断鼠标指针右半部可见区域的尺寸是否小于大图的宽度,如果小于的话则将图片在鼠标指针的左侧显示,否则在鼠标指针的右侧显示。这基本就是一个数学逻辑问题。

原文地址是:http://www.softwhy.com/forum.php?mod=viewthread&tid=7989

更多内容可以参阅:http://www.softwhy.com/jquery/

关于爱程序网 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助