`
axl234
  • 浏览: 268852 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

基于jQuery的鼠标悬停时放大图片的效果制作

阅读更多
先编写一个无序列表的结构,a标签中的img标签用来存放小图片,a标签添加一个rel属性,用来存放大图片的路径。

1 <UL id=gallery> 

2 <LI><A class=smallimage href="http://stylechen.com/" rel=images/001_big.jpg><IMG alt="" src="images/001_small.jpg"></A> 

3 <LI><A class=smallimage href="http://stylechen.com/" rel=images/002_big.jpg><IMG alt="" src="images/002_small.jpg"></A> 

4 <LI><A class=smallimage href="http://stylechen.com/" rel=images/003_big.jpg><IMG alt="" src="images/003_small.jpg"></A> 

5 </LI></UL>

CSS样式表部分:

bigimage是用jQuery创建的一个p标签的id,用来存放大图片,设置其样式为绝对定位,并先隐藏。给a标签添加一个黑色的背景,是为了给图片变暗的效果做铺垫。就这样,一个简单的相册效果就做好了。

1 ul#gallery { list-style:none; width:660px; margin:0 auto 10px; padding-left:20px; border:1px solid #d3d3d3; background:#fff; overflow:hidden; } 

2   

3 ul#gallery li { width:200px; height:200px; float:left; margin:20px 20px 20px 0; } 

4   

5 ul#gallery li a.smallimage { background:#333; /*添加一个黑色的背景为图片变暗的效果做铺垫*/ display:block; width:200px; height:200px; } 

6   

7 #bigimage { position:absolute; display:none; /*大图片的父标签设置相对定位并将显示样式设置为隐藏*/ } 

8   

9 #bigimage img { width:400px; height:400px; padding:5px; background:#fff; border:1px solid #e3e3e3; }

jQuery代码部分:

先声明2个变量x,y用来存放大图片离鼠标的距离。在body中追加一个id为bigimage的p标签,用来存放大图片,大图片的路径就包含在了a标签的rel属性中。当鼠标在小图片悬停的时候,将获取到的鼠标在浏览器中的坐标赋值给大图片绝对定位的坐标,并以淡入的效果显示。之后,再给小图片绑定一个mousemove事件,也就是当鼠标移动的时候,大图片就会跟着鼠标移动了。看以下的代码:

01 <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"></script> 

02 <script type="text/javascript"> 

03 //<![CDATA[ 

04 $(function(){ 

05   

06     var x = 22; 

07     var y = 20; 

08   

09     $("a.smallimage").hover(function(e){  //绑定一个鼠标悬停时事件 

10     //新建一个p标签来存放大图片,this.rel就是获取到a标签的大图片的路径,然后追加到body中 

11         $("body").append('<p id="bigimage"><img src="'+ this.rel + '" alt="" /></p>');  

12   

13     //改变小图片的透明度为0.5,结合上面的CSS,看起来就象是图片变暗了 

14         $(this).find('img').stop().fadeTo('slow',0.5); 

15   

16     //将鼠标的坐标和声明的x,y做运算并赋值给大图片绝对定位的坐标,然后以fadeIn的效果显示 

17         $("#bigimage").css({top:(e.pageY - y ) + 'px',left:(e.pageX + x ) + 'px'}).fadeIn('fast'); 

18   

19     },function(){ //鼠标离开后  

20   

21     //将变暗的图片复原 

22         $(this).find('img').stop().fadeTo('slow',1); 

23   

24     //移除新增的p标签 

25         $("#bigimage").remove(); 

26     }); 

27   

28     $("a.smallimage").mousemove(function(e){  //绑定一个鼠标移动的事件 

29   

30     //将鼠标的坐标和声明的x,y做运算并赋值给大图片绝对定位的坐标,这样大图片就能跟随图片而移动了 

31     $("#bigimage").css({top:(e.pageY -y ) + 'px',left:(e.pageX + x ) + 'px'}); 

32     }); 

33 }); 

34   

35 //]]> 

36 </script>

到这一步,效果已经差不多了,但是效果还并不完美。如果弹出的大图片超过了浏览器的宽度就会出现滚动条,这对于用户体验来说的确很不好。趁周末有时间我又在原来的基础上进行了修改。

先分析下思路,默认情况下,弹出的大图片的位置始终是在当前鼠标指针的右侧,如果当前鼠标指针离浏览器右侧边界的宽度小于弹出的大图片的宽度时,就会出现图片溢出浏览器的现象。那么只要写一个语句判断当前鼠标指针离浏览器右侧的边界的宽度是否小于大图片的宽度,然后再根据这个判断来显示。

有了上面的思路就好办了,为了使代码更简洁,提高复用性,我新增了一个widthJudge函数用于判断宽度:

view sourceprint?01 function widthJudge(e){ 

02         //页面的总宽度减去鼠标当前的X坐标得到右侧边界的宽度 

03     var marginRight = document.documentElement.clientWidth - e.pageX;     

04             //获取弹出的大图片的宽度 

05     var imageWidth = $("#bigimage").width();     

06             //如果右侧边界的宽度小于弹出的大图片的宽度 

07     if(marginRight < imageWidth) 

08     { 

09                 //重新计算变量x的值 

10         x = imageWidth + 22; 

11                 //此时大图片的位置应该是当前鼠标指针的宽度减去新的x的值 

12         $("#bigimage").css({top:(e.pageY - y ) + 'px',left:(e.pageX - x ) + 'px'}); 

13     }else{    //否则 

14                  //仍将x定义为22,这一步千万不能省略,因为之前x的值已经改变 

15         x = 22; 

16                 //如果右侧的宽度值够显示大图片,将仍然按照原来的位置显示 

17         $("#bigimage").css({top:(e.pageY - y ) + 'px',left:(e.pageX + x ) + 'px'}); 

18     }; 

19 }

最后再结合上面的代码,完整的jQuery代码部分如下:

view sourceprint?01 <script type="text/javascript"> 

02 //<![CDATA[ 

03 $(function(){    

04   

05     var x = 22; 

06     var y = 20; 

07   

08     $("a.smallimage").hover(function(e){ 

09             $("body").append('<p id="bigimage"><img src="'+ this.rel + '" alt="" /></p>'); 

10             $(this).find('img').stop().fadeTo('slow',0.5); 

11         widthJudge(e);    //调用宽度判断函数 

12         $("#bigimage").fadeIn('fast'); 

13     },function(){ 

14         $(this).find('img').stop().fadeTo('slow',1); 

15         $("#bigimage").remove(); 

16     });  

17   

18     $("a.smallimage").mousemove(function(e){ 

19         widthJudge(e);    //调用宽度判断函数 

20     });  

21   

22     function widthJudge(e){ 

23         var marginRight = document.documentElement.clientWidth - e.pageX; 

24         var imageWidth = $("#bigimage").width(); 

25         if(marginRight < imageWidth) 

26         { 

27             x = imageWidth + 22; 

28             $("#bigimage").css({top:(e.pageY - y ) + 'px',left:(e.pageX - x ) + 'px'}); 

29         }else{ 

30             x = 22; 

31             $("#bigimage").css({top:(e.pageY - y ) + 'px',left:(e.pageX + x ) + 'px'}); 

32         }; 

33     } 

34 }); 

35 //]]> 

36 </script>

解决了图片溢出浏览器的问题,这个效果还算不错了。如果你喜欢这个效果,你可以下载源文件。

分享到:
评论

相关推荐

    jquery鼠标悬停放大图片

    "jQuery鼠标悬停放大图片"是一个常见的功能,它可以使用户在鼠标指针悬停在图片上时看到放大的图像细节,从而增强视觉效果和用户对图片内容的理解。这个例子中,我们将深入探讨如何使用jQuery库实现这一功能,并涉及...

    基于jQuery的鼠标悬停时放大图片的效果演示

    "基于jQuery的鼠标悬停时放大图片的效果演示"是一个典型的交互式设计技术,它通过JavaScript库jQuery实现,增强了用户对图片的查看体验。当用户将鼠标指针悬停在图片上时,图片会变得稍微暗淡,并在旁边或上方弹出一...

    jquery鼠标悬停图片放大

    "jQuery鼠标悬停图片放大"是一个常见的功能,它可以使用户在浏览网页时,当鼠标指针悬停在图片上时,图片会自动放大,而当鼠标移开时,图片又会恢复原大小。这种效果能够使用户更清晰地查看细节,尤其在产品展示或者...

    jQuery鼠标悬停图片变色放大显示效果.rar

    "jQuery鼠标悬停图片变色放大显示效果" 是一种常见的交互式设计技术,它利用jQuery库来实现当用户将鼠标悬停在图片上时,图片会变色并放大显示,从而吸引用户的注意力,提供更丰富的视觉体验。下面我们将深入探讨这...

    jquery鼠标悬停 图片预览功能的效果下载

    在本文中,我们将深入探讨如何使用jQuery库来实现一个鼠标悬停时的图片预览功能。这个功能在网站设计中非常常见,它为用户提供了一种便捷的方式来预览图像,而无需点击进入新页面或者加载全尺寸图片。我们将讨论实现...

    酷酷的jQuery鼠标悬停图片放大切换显示效果

    在"酷酷的jQuery鼠标悬停图片放大切换显示效果"中,我们主要关注两个关键点:鼠标悬停事件和图片切换与放大效果。 1. **鼠标悬停事件**:在jQuery中,`mouseenter` 和 `mouseleave` 事件用于监听鼠标进入和离开元素...

    jQuery鼠标悬停图片放大效果.zip

    本教程将详细讲解如何利用jQuery实现一个简单的鼠标悬停图片放大效果,这是一个常见的JS特效,常见于图片相册或者产品展示页面。 首先,我们需要在HTML中设置一个图片元素,用于显示待放大的图片。例如: ```html ...

    jquery实现鼠标悬停在图片上的放大效果

    "jQuery鼠标悬停焦点图放大效果"是一种常见的增强用户视觉体验的技术,它使得用户在将鼠标光标移动到图片上时,图片会自动放大,突出显示细节,移开鼠标后则恢复原状。这种效果广泛应用于产品展示、图像画廊等场景,...

    JQuery 鼠标悬停图片放大

    "JQuery 鼠标悬停图片放大" 是一种常见的交互效果,它使得用户在将鼠标指针悬停在图片上时,图片会自动放大,从而让用户能更清晰地查看图片细节。这种方式常用于产品展示、画廊或任何需要突出显示图片的场景。下面...

    jQuery鼠标悬停居中放大显示内容代码

    "jQuery鼠标悬停居中放大显示内容代码"就是一个很好的例子,它允许用户在鼠标悬停在某个模块上时,该模块会自动居中并放大,以突出显示内部详细内容。这种效果常见于产品展示、图片预览或导航菜单等场景,能吸引用户...

    jquery实现鼠标悬停在图片上的放大效果.rar

    本教程将聚焦于如何使用jQuery来实现一个常见且实用的UI效果:当鼠标悬停在图片上时,图片会放大展示。这个效果在网页设计中常用于提升用户体验,让用户更清晰地查看细节。 首先,我们需要了解jQuery的基本用法。...

    jquery css3鼠标悬停图片放大显示效果代码

    "jquery css3鼠标悬停图片放大显示效果代码"是一个典型的技术实现,它结合了JavaScript库jQuery和CSS3的强大功能,为用户创建了一个动态且吸引人的图片展示方式。当用户将鼠标悬停在图片上时,图片会自动放大,突出...

    jquery鼠标悬浮图片放大效果

    "jQuery鼠标悬浮图片放大效果"就是一个很好的例子,它使得用户在浏览商品图片时能够更清楚地查看细节,从而增强购物体验。这个效果在电商网站如淘宝上广泛使用,今天我们将会详细探讨如何使用jQuery实现这一功能。 ...

    jquery鼠标悬停放大显示图片信息.zip

    这个"jquery鼠标悬停放大显示图片信息.zip"文件很可能包含了一个使用jQuery实现这一功能的示例代码。现在,我们将深入探讨如何使用CSS、JavaScript(特别是jQuery)以及HTML5来创建这样的效果。 首先,我们需要一个...

    jQuery鼠标悬停图片变色放大显示效果

    "jQuery鼠标悬停图片变色放大显示效果"是一种常见的网页交互设计技术,它使得用户在鼠标移动到图片上时,图片会自动变色并放大,从而吸引用户的注意力,增强视觉体验。这种效果常用于产品展示、图片预览等场景。 ...

    jquery鼠标悬停图片放大滑动显示标题

    标题“jquery鼠标悬停图片放大滑动显示标题”涉及的技术点主要包括jQuery的选择器、事件处理、CSS样式修改以及图片的动态效果。 1. **jQuery选择器**:jQuery提供了丰富的选择器来定位DOM元素,如`$("#id")`用于...

    98、jquery鼠标悬停图片放大器代码

    "98、jquery鼠标悬停图片放大器代码"是一个利用jQuery实现的功能,当用户将鼠标指针悬停在图片上时,图片会自动放大,提供更清晰的细节视图,为用户提供更好的浏览体验。 这个功能的核心原理是利用jQuery的事件监听...

    jquery制作鼠标悬停图片放大镜特效

    jQuery是一个广泛使用的JavaScript库,它简化了DOM操作、事件处理以及动画效果的创建,因此非常适合用来实现鼠标悬停图片放大镜的功能。本文将详细讲解如何使用jQuery来制作这一特效。 首先,我们需要在HTML中设置...

Global site tag (gtag.js) - Google Analytics