鼠标移到图片变化的三种写法(可移植性强、代码少)

当鼠标移动到某个图片的时候,图片变化。当鼠标移出去的时候,图片变回来。下面是三种写法:
第一种,也是最笨,最麻烦的写法,如下:

 1     $(".web-footer2 .inner").each(function(){
 2         $(this).find("ul").eq(1).find("img").eq(0).hover(function(){
 3             $(this).attr("src","/img/footer-qq2.png");
 4         },function(){
 5             $(this).attr("src","/img/footer-qq.png");
 6         })
 7         $(this).find("ul").eq(1).find("img").eq(1).hover(function(){
 8             $(this).attr("src","/img/footer-weibo2.png");
 9         },function(){
10             $(this).attr("src","/img/footer-weibo.png");
11         })
12         $(this).find("ul").eq(1).find("img").eq(2).hover(function(){
13             $(this).attr("src","/img/footer-qqweibo2.png");
14         },function(){
15             $(this).attr("src","/img/footer-qqweibo.png");
16         })
17         $(this).find("ul").eq(1).find("img").eq(3).hover(function(){
18             $(this).attr("src","/img/footer-weixin2.png");
19         },function(){
20             $(this).attr("src","/img/footer-weixin.png");
21         })
22     }) 

用了each、find、eq、hover。代码重复、臃肿。而且可移植性特别差。下面是第二种

 1     $(".web-footer2 .inner").on("mouseover mouseout","ul:eq(1) img",function(e){
 2         if(e.type=="mouseover"){
 3             if($(this).attr("src") == "/img/footer-qq.png"){
 4                 $(this).attr("src","/img/footer-qq2.png")
 5             }else if(....){....}
 6         }else if(e.type=="mouseout"){
 7             if($(this).attr("src") == "/img/footer-qq2.png"){
 8                 $(this).attr("src","/img/footer-qq.png")
 9             }else if(....){....}
10         }
11     }) 

用了on、attr函数,虽然代码量减少,但可移植性还是特别的差。那么就有了第三种

 1     $(".web-footer2 .inner").on("mouseover mouseout","ul:eq(1) img",function(e){
 2         var img_arr = [
 3         ["/img/footer-qq.png","/img/footer-qq2.png"],
 4         ["/img/footer-weibo.png","/img/footer-weibo2.png"],
 5         ["/img/footer-qqweibo.png","/img/footer-qqweibo2.png"],
 6         ["/img/footer-weixin.png","/img/footer-weixin2.png"]
 7         ];
 8         var img_src = $(this).attr("src");
 9         if(event.type=="mouseover"){
10             for(i=0;i<4;i++){
11                 if($.inArray(img_src,img_arr[i]) !== -1){
12                     if(img_src == img_arr[i][0]){
13                         $(this).attr("src",img_arr[i][1]);
14                     }
15                 }
16             }
17         }else if(event.type=="mouseout"){
18             for(i=0;i<4;i++){
19                 if($.inArray(img_src,img_arr[i]) !== -1){
20                     if(img_src == img_arr[i][1]){
21                         $(this).attr("src",img_arr[i][0]);
22                     }
23                 }
24             }
25         }
26     }) 

现在我重点来说第三种,也就是这一种。先把图片变化前的路径和变化后的路径放到二维数组里(img_arr变量),img_src其实可以不需要,我只是为了方便。然后用if判断语句,判断event.type是否 mouseover,也就是是否移到图片上,当移到图片上的时候用for循环,不用for循环的话。你移到一个图片上后,所有图片都会变。因为有4张图,所以i=0;i<4。如果你的图片不确定有多少的话,你可以设置几个变量,如下
var img_length = $(".web-footer2 .inner").find("img");  //某个元素里的图片总数。
然后改下for循环语句为for(i=0;i<img_length.length;i++) 就行了
然后再来一个if语句,判断当前鼠标移到的图片地址是否在img_arr二维数组里(如果不存在返回-1,如果存在返回在数组里的第几个),如果存在,则再判断,当前这个图片地址是否在对应二维数组里的第一个数组里的值(这话比较难理解,就是img_arr里的"/img/footer-qq.png"、"/img/footer-weibo.png"、"/img/footer-qqweibo.png"、["/img/footer-weixin.png")如果是相对应,就把当前鼠标所在的图片改成二维数组里的第二个数组里的值,也就是("/img/footer-qq2.png"、"/img/footer-weibo2.png"、"/img/footer-qqweibo2.png"、"/img/footer-weixin2.png")

时间: 2024-12-10 10:45:34

鼠标移到图片变化的三种写法(可移植性强、代码少)的相关文章

图片淡入淡出代码,鼠标移上透明度变化

又一个图片透明度特效,鼠标移在图片上,图片的透明度就发生变化,最初的透明度为20,鼠标移上后透明度恢复正常,很明显的响应鼠标的图片特效,而且代码超简单,新手也能学会使用. <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>石家庄伸缩门</title> </head>

DIV css中cursor属性详解-鼠标移到图片变换鼠标形状 (转)

css中cursor属性详解-鼠标移到图片变换鼠标形状 语法: cursor : auto | all-scroll | col-resize| crosshair | default | hand | move | help | no-drop | not-allowed | pointer | progress | row-resize | text | vertical-text | wait | *-resize | url ( url )  取值: auto  :   默认值.浏览器根

c# pictureBox1.Image的获得图片路径的三种方法 winform

代码如下:c# pictureBox1.Image的获得图片路径的三种方法 winform 1.绝对路径:this.pictureBox2.Image=Image.FromFile("D:\\001.jpg"); 2.相对路径:Application.StartupPath; 可以得到程序根目录 string picPath=Application.StartupPath+"\\1.gif"; 3.获得网络图片的路径 this.pictureBox2.Image=

鼠标移上图片滑出文字提示

本效果演示了一个响应鼠标的提示功能,鼠标移上图片后会滑出一个带背景的提示框,用CSS去控制它的大小和样式,用JS去控制它的滑出和速度,图文混排的时候这个能用得上. 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <html xmlns="

横冲直撞vue(第三篇):vue中template的三种写法、v-bind、v-on、更新元素的指令v-text与v-html、条件渲染指令v-if 与v-show、v-for

一.vue中template的三种写法 第一种(字符串模板写法): 直接写在vue构造器里,这种写法比较直观,适用于html代码不多的场景,但是如果模板里html代码太多,不便于维护,不建议这么写. <body> <div id="app"></div> <script src="./lib/vue.js"></script> <script type="text/javascript&qu

同一个逻辑的三种写法

同一个逻辑的三种写法: 我的写法 ? 林姐的写法 方法一 方法二 这种方法节省内存

HDU Today(三种写法)(最短路)

Description 经过锦囊相助,海东集团终于度过了危机,从此,HDU的发展就一直顺风顺水,到了2050年,集团已经相当规模了,据说进入了钱江肉丝经济开发区500强.这时候,XHD夫妇也退居了二线,并在风景秀美的诸暨市?浦镇陶姚村买了个房子,开始安度晚年了. 这样住了一段时间,徐总对当地的交通还是不太了解.有时很郁闷,想去一个地方又不知道应该乘什么公交车,在什么地方转车,在什么地方下车(其实徐总自己有车,却一定要与民同乐,这就是徐总的性格). 徐总经常会问蹩脚的英文问路:"Can you h

js中斐波拉切数的三种写法;

js中斐波拉切数的三种写法: function factorial(num){ if(num <=1){ return 1; }else{ return num* factorial(num-1); } } console.log(factorial(5));//120 面这个函数的执行与函数名紧紧耦合在了一起,可以使用arguments.callee可以消除函数解耦 第二种(在严格模式下,访问这个属性会抛出TypeError错误) function factorial(num){ if(num

布局填充器的三种写法

布局填充器的三种写法:  1.layoutInflater=layoutInflater.from(this);  2.layoutInflater=(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);  3.layoutInflater=this.getLayoutInflater();