今天试着用jq写了下图片百叶窗效果,就是鼠标经过那张图,那张图显示,其他图片缩小~

最开始看效果的时候觉得好复杂,以为是宽度的变化写的动画,但是后来细想,如果是宽度变化,那么图片变窄的时候肯定会失真了,后来经过学习,发现原来原理很简单:
基本原理就是,将图片都绝对定位到盒子里,然后分别定位,平分整个盒子,图片就会显示一种层叠效果了(本案例是通过left值控制位置);然后通过jq控制,当鼠标经过某张图片的时候这张图片完全显示(即left值进行变化),其他图片的left值也进行相应的改变。
文字描述起来很难懂的样子,先上html和css布局效果
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<style type="text/css">
div{
width: 420px;
height: 186px;
border: 2px solid #ccc;
overflow: hidden;
position: relative;
margin: 100px auto;
}
img{
border: none;
display: block;
position: absolute;
top: 0;
}
img:nth-of-type(1){
left: 0;
}
img:nth-of-type(2){
left: 84px;
}
img:nth-of-type(3){
left: 168px;
}
img:nth-of-type(4){
left: 252px;
}
img:nth-of-type(5){
left: 336px;
}
</style>
<div class="box">
<img src="http://tupian.enterdesk.com/2013/mxy/10/12/1/17.jpg">
<img src="http://tupian.enterdesk.com/2013/mxy/07/0715/1/7.jpg">
<img src="http://src.house.sina.com.cn/imp/imp/deal/5c/fa/e/afb00d1b581922fa567f9d65bfd_p1_mk1.jpg">
<img src="http://www.wallcoo.com/nature/wild_field_01/wallpapers/1440x900/3787717_Wild_field_v1224236762.jpg">
<img src="http://pic31.nipic.com/20130628/10700765_164502542117_2.jpg">
</div>
</body>
</html>
布局很简单,接下来就是jq控制各个图片相对位置的变化了。
起始位置:五张图片的 left 值在css已经写好,就是平分了整个盒子的宽度;
鼠标经过时候:经过的那张图片完全显示,即占据宽度280px(图片的宽度是280px),剩余的宽度是 (盒子宽度-280px)/剩余的图片数量,根据所得值确定各个图片的终止位置,left值;
感觉自己说的好复杂,先看下鼠标讲过某张图的时候的动画效果:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<style type="text/css">
div{
width: 420px;
height: 186px;
border: 2px solid #ccc;
overflow: hidden;
position: relative;
margin: 100px auto;
}
img{
border: none;
display: block;
position: absolute;
top: 0;
}
img:nth-of-type(1){
left: 0;
}
img:nth-of-type(2){
left: 84px;
}
img:nth-of-type(3){
left: 168px;
}
img:nth-of-type(4){
left: 252px;
}
img:nth-of-type(5){
left: 336px;
}
</style>
<div class="box">
<img src="http://tupian.enterdesk.com/2013/mxy/10/12/1/17.jpg">
<img src="http://tupian.enterdesk.com/2013/mxy/07/0715/1/7.jpg">
<img src="http://src.house.sina.com.cn/imp/imp/deal/5c/fa/e/afb00d1b581922fa567f9d65bfd_p1_mk1.jpg">
<img src="http://www.wallcoo.com/nature/wild_field_01/wallpapers/1440x900/3787717_Wild_field_v1224236762.jpg">
<img src="http://pic31.nipic.com/20130628/10700765_164502542117_2.jpg">
</div>
<script type="text/javascript" src="https://code.jquery.com/jquery-1.11.3.js"></script>
<script type="text/javascript">
var lefts;
var idx;
$("img").each(function(){
$(this).mouseenter(function(e) {
idx = $(this).index();
lefts = idx * 35;
//当前图片的变化
$(this).stop(true).animate({"left" : idx * 35}, 1000);
});
})
当前图片能够愉快的玩耍了,接下来的重点就是其余图片怎么运动。
此时,我们可以把剩余的图片分成左右两部分,用jq 的 ":lt()" 和 ":gt()"方法写出剩余部分的效果。这里有一个小小的坑,自己也是绕了半天,最后还是别人提醒的才绕出来。
以当前图片左侧动画效果为例,最开始我是这么写的
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<style type="text/css">
div{
width: 420px;
height: 186px;
border: 2px solid #ccc;
overflow: hidden;
position: relative;
margin: 100px auto;
}
img{
border: none;
display: block;
position: absolute;
top: 0;
}
img:nth-of-type(1){
left: 0;
}
img:nth-of-type(2){
left: 84px;
}
img:nth-of-type(3){
left: 168px;
}
img:nth-of-type(4){
left: 252px;
}
img:nth-of-type(5){
left: 336px;
}
</style>
<div class="box">
<img src="http://tupian.enterdesk.com/2013/mxy/10/12/1/17.jpg">
<img src="http://tupian.enterdesk.com/2013/mxy/07/0715/1/7.jpg">
<img src="http://src.house.sina.com.cn/imp/imp/deal/5c/fa/e/afb00d1b581922fa567f9d65bfd_p1_mk1.jpg">
<img src="http://www.wallcoo.com/nature/wild_field_01/wallpapers/1440x900/3787717_Wild_field_v1224236762.jpg">
<img src="http://pic31.nipic.com/20130628/10700765_164502542117_2.jpg">
</div>
<script type="text/javascript" src="https://code.jquery.com/jquery-1.11.3.js"></script>
<script type="text/javascript">
var lefts;
var idx;
$("img").each(function(){
$(this).mouseenter(function(e) {
idx = $(this).index();
lefts = idx * 35;
//当前图片的变化
$(this).stop(true).animate({"left" : idx * 35}, 1000);
$(“img:lt( idx )“).each(function(){
$(this).stop(true).animate({"left" : ($(this).index()) * 35}, 1000)
})
});
})
看上去没有什么错误,见证奇迹~~~奇迹~~迹~~~然而并没有什么奇迹,原因就是 $(“img:lt( idx )“) 这种写法,里面的idx已经不是变量了,所以无法获取当前的 idx 值,我们可以在外面定义一个变量,同时用 + 连接 lt 和变量 idx,再把变量引入进去即可。
因此更改后如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<style type="text/css">
div{
width: 420px;
height: 186px;
border: 2px solid #ccc;
overflow: hidden;
position: relative;
margin: 100px auto;
}
img{
border: none;
display: block;
position: absolute;
top: 0;
}
img:nth-of-type(1){
left: 0;
}
img:nth-of-type(2){
left: 84px;
}
img:nth-of-type(3){
left: 168px;
}
img:nth-of-type(4){
left: 252px;
}
img:nth-of-type(5){
left: 336px;
}
</style>
<div class="box">
<img src="http://tupian.enterdesk.com/2013/mxy/10/12/1/17.jpg">
<img src="http://tupian.enterdesk.com/2013/mxy/07/0715/1/7.jpg">
<img src="http://src.house.sina.com.cn/imp/imp/deal/5c/fa/e/afb00d1b581922fa567f9d65bfd_p1_mk1.jpg">
<img src="http://www.wallcoo.com/nature/wild_field_01/wallpapers/1440x900/3787717_Wild_field_v1224236762.jpg">
<img src="http://pic31.nipic.com/20130628/10700765_164502542117_2.jpg">
</div>
<script type="text/javascript" src="https://code.jquery.com/jquery-1.11.3.js"></script>
<script type="text/javascript">
var lefts;
var idx;
var imgL;
$("img").each(function(){
$(this).mouseenter(function(e) {
idx = $(this).index();
imgL = "img:lt(" + idx + ")"
lefts = idx * 35;
//当前图片的变化
$(this).stop(true).animate({"left" : idx * 35}, 1000);
$(imgL).each(function(){
$(this).stop(true).animate({"left" : ($(this).index()) * 35}, 1000)
})
});
})
这样奇迹就出现了~~ 同样的道理,右侧也是同样的方法。
最终代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<style type="text/css">
div{
width: 420px;
height: 186px;
border: 2px solid #ccc;
overflow: hidden;
position: relative;
margin: 100px auto;
}
img{
width:280px;
height:186px;
border: none;
display: block;
position: absolute;
top: 0;
}
img:nth-of-type(1){
left: 0;
}
img:nth-of-type(2){
left: 84px;
}
img:nth-of-type(3){
left: 168px;
}
img:nth-of-type(4){
left: 252px;
}
img:nth-of-type(5){
left: 336px;
}
</style>
<div class="box">
<img src="http://tupian.enterdesk.com/2013/mxy/10/12/1/17.jpg">
<img src="http://tupian.enterdesk.com/2013/mxy/07/0715/1/7.jpg">
<img src="http://src.house.sina.com.cn/imp/imp/deal/5c/fa/e/afb00d1b581922fa567f9d65bfd_p1_mk1.jpg">
<img src="http://www.wallcoo.com/nature/wild_field_01/wallpapers/1440x900/3787717_Wild_field_v1224236762.jpg">
<img src="http://pic31.nipic.com/20130628/10700765_164502542117_2.jpg">
</div>
<script type="text/javascript" src="https://code.jquery.com/jquery-1.11.3.js"></script>
<script type="text/javascript">
//精简之后的方法
var lefts;
var idx;
var imgL;
var imgR;
$("img").each(function(){
$(this).mouseenter(function(e) {
idx = $(this).index();
imgL = "img:lt(" + idx + ")" //获取当前左侧的所有图片,如果直接用 $("img:lt(idx)"),idx会被当做字符串,获取不到对应的值
imgR = "img:gt(" + idx + ")" //获取当前右侧的所有图片
lefts = idx * 35;
//当前图片的变化
$(this).stop(true).animate({"left" : idx * 35}, 1000);
//左侧图片的变化
$(imgL).each(function(){
$(this).stop(true).animate({"left" : ($(this).index()) * 35}, 1000)
})
//右侧图片的变化
$(imgR).each(function(){
$(this).stop(true).animate({"left" : ($(this).index()+7) * 35}, 1000)
})
});
})
$("img").each(function(){
$(this).mouseleave(function(){
$("img").each(function(){
$(this).stop(true).animate({"left" : ($(this).index())*84}, 1000);
})
});
})
</script>
</body>
</html>
鼠标移出效果,就是恢复到最开始的状态,就不在叙述了。
方法可能不是最简单的方法,说的也可能不甚详尽,希望大神多多指教,我也多多学习~~~
ps: 图片不知道怎么加上来,稍后看下再改吧。欢迎各位加入交流学习前端群 466039913
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!
# jquery
# 百叶窗
# jQuery实现百叶窗焦点图动画效果代码分享(附源码下载)
# jquery实现页面百叶窗走马灯式翻滚显示效果的方法
# jQuery 翻牌或百叶窗效果(内容三秒自动切换)
# jquery实现百叶窗效果(利用li的定位)
# 鼠标
# 那张
# 我们可以
# 很简单
# 我是
# 有什么
# 我也
# 就会
# 很难
# 也可
# 没有什么
# 半天
# 这张
# 大神
# 写了
# 为例
# 试着
# 最简单
# 不知道怎么
# 再把
相关文章:
山东网站制作公司有哪些,山东大源集团官网?
如何用PHP快速搭建CMS系统?
南平网站制作公司,2025年南平市事业单位报名时间?
如何解决ASP生成WAP建站中文乱码问题?
如何自定义建站之星网站的导航菜单样式?
如何在阿里云香港服务器快速搭建网站?
Python lxml的etree和ElementTree有什么区别
如何在阿里云域名上完成建站全流程?
如何在阿里云虚拟主机上快速搭建个人网站?
如何用狗爹虚拟主机快速搭建网站?
制作电商网页,电商供应链怎么做?
如何快速生成ASP一键建站模板并优化安全性?
网站制作价目表怎么做,珍爱网婚介费用多少?
如何通过老薛主机一键快速建站?
企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?
道歉网站制作流程,世纪佳缘致歉小吴事件,相亲网站身份信息伪造该如何稽查?
如何在腾讯云服务器上快速搭建个人网站?
javascript中对象的定义、使用以及对象和原型链操作小结
如何配置支付宝与微信支付功能?
代刷网站制作软件,别人代刷火车票靠谱吗?
建站主机服务器选型指南与性能优化方案解析
教学网站制作软件,学习*后期制作的网站有哪些?
无锡营销型网站制作公司,无锡网选车牌流程?
c# 在ASP.NET Core中管理和取消后台任务
制作网站的公司有哪些,做一个公司网站要多少钱?
如何在万网自助建站中设置域名及备案?
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
nginx修改上传文件大小限制的方法
建站10G流量真的够用吗?如何应对访问高峰?
建站之星后台密码如何安全设置与找回?
建站主机选哪种环境更利于SEO优化?
如何用VPS主机快速搭建个人网站?
专业网站建设制作报价,网页设计制作要考什么证?
高防服务器如何保障网站安全无虞?
家庭建站与云服务器建站,如何选择更优?
c# 服务器GC和工作站GC的区别和设置
济南企业网站制作公司,济南社保单位网上缴费步骤?
建站之星代理如何获取技术支持?
武汉网站如何制作,黄黄高铁武穴北站途经哪些村庄?
宝塔新建站点报错如何解决?
如何挑选最适合建站的高性能VPS主机?
建站主机与虚拟主机有何区别?如何选择最优方案?
Python如何创建带属性的XML节点
Python路径拼接规范_跨平台处理说明【指导】
如何在云主机快速搭建网站站点?
天津个人网站制作公司,天津网约车驾驶员从业资格证官网?
招贴海报怎么做,什么是海报招贴?
建站VPS配置与SEO优化指南:关键词排名提升策略
学校建站服务器如何选型才能满足性能需求?
如何在西部数码注册域名并快速搭建网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。