jQuery 实现 图片框切换【与原生 JS 对比】
我们学习原生 JS 时,写过一个图片框切换的案例,还记得采用的是什么方法做到导航栏和内容栏同步切换吗?用的是自定义属性的创建和获取,比较麻烦,我们还要使用for循环遍历绑定事件,但是学了 jQuery 之后,虽然只是入门,但以及可以完成一些基本的动态效果。
我们来对比一下二者的实现部分:
原生 JS:
原生 JS 就是在循环给每一个 li 绑定鼠标移动事件时使用 setAttribute 设置一个自定义属性 index,然后绑定移动事件时使用 getAttribute 获取到该 li 绑定过的自定义属性值 index,再使用排他思想:干掉其他人,留下我自己,达到只留下对应 li 自定义属性值的图片
var lis=document.querySelectorAll('li') var as=document.querySelectorAll('a') for(var i=0;i<lis.length;i++){ lis[i].setAttribute('index',i) //设置自定义属性 lis[i].addEventListener('mouseover',function() { var index=this.getAttribute('index') //获取自定义属性 for(var i=0;i<as.length;i++){ as[i].style.display='none'; } as[index].style.display='block' }) }
jQuery:
jquery 的实现会太过于简单了!!,我们因为有隐式迭代,所以不需要循环绑定,使用 jQuery 的 index() 方法得到光标移动到的 li 的索引值,再直接使用排他思想,使用筛选方法中的 eq() 方法,得到光标移动对应索引值的图片,使用 jQuery 的 show() 方法使其显示,再使用 hide() 方法,使其兄弟级隐藏(siblings)
$('.map-box li').mouseover(function(){ var index=$(this).index() $('.img-box a').eq(index).show() $('.img-box a').eq(index).siblings().hide() })
完整代码:
Document *{ padding: 0; margin: 0; } .out-box{ box-sizing: border-box; width: 700px; height: 500px; margin: 100px auto; } .map-box{ float: left; box-sizing: border-box; width: 200px; height: 500px; background-color: rgb(129, 129, 129); } .img-box{ float: left; box-sizing: border-box; width: 500px; height: 500px; border: 1.5px solid; border-left: 0; } .map-box ul{width: 200px; box-sizing: border-box; } .map-box ul li{ box-sizing: border-box; width: 200px; height: 100px; background-color: rgb(255, 230, 131); border: 1.5px solid; border-bottom: 0; list-style: none; text-align: center; line-height: 100px; font-size: 27px; font-weight: 800; } .map-box ul li:last-child{ border-bottom:1.5px solid; } .map-box ul li:hover{ background-color: rgb(202, 148, 0); color: aliceblue; border-color: black; } .img-box a{ display: inline-block; display: none; } .img-box img{ width: 498px; height: 498px; box-sizing: border-box; } $('.map-box li').mouseover(function(){ var index=$(this).index() $('.img-box a').eq(index).show() $('.img-box a').eq(index).siblings().hide() })