jquery实现百叶窗效果
发布时间 - 2026-01-10 22:28:24 点击率:次今天试着用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的定位)
# 鼠标
# 那张
# 我们可以
# 很简单
# 我是
# 有什么
# 我也
# 就会
# 很难
# 也可
# 没有什么
# 半天
# 这张
# 大神
# 写了
# 为例
# 试着
# 最简单
# 不知道怎么
# 再把
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制
Laravel如何处理异常和错误?(Handler示例)
Laravel如何创建自定义Artisan命令?(代码示例)
专业商城网站制作公司有哪些,pi商城官网是哪个?
LinuxShell函数封装方法_脚本复用设计思路【教程】
html文件怎么打开证书错误_https协议的html打开提示不安全【指南】
长沙做网站要多少钱,长沙国安网络怎么样?
香港服务器网站推广:SEO优化与外贸独立站搭建策略
如何快速生成高效建站系统源代码?
Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议
Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)
音响网站制作视频教程,隆霸音响官方网站?
百度浏览器如何管理插件 百度浏览器插件管理方法
Laravel如何与Pusher实现实时通信?(WebSocket示例)
python中快速进行多个字符替换的方法小结
Laravel怎么实现模型属性的自动加密
微信小程序 五星评分(包括半颗星评分)实例代码
简单实现jsp分页
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
如何快速使用云服务器搭建个人网站?
打开php文件提示内存不足_怎么调整php内存限制【解决方案】
如何在万网利用已有域名快速建站?
如何在Tomcat中配置并部署网站项目?
Laravel如何使用Service Provider服务提供者_Laravel依赖注入与容器绑定【深度】
网站制作企业,网站的banner和导航栏是指什么?
如何在万网开始建站?分步指南解析
如何在万网主机上快速搭建网站?
Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层
Laravel怎么连接多个数据库_Laravel多数据库连接配置
如何快速生成ASP一键建站模板并优化安全性?
在线教育网站制作平台,山西立德教育官网?
如何用JavaScript实现文本编辑器_光标和选区怎么处理
Laravel如何实现事件和监听器?(Event & Listener实战)
java获取注册ip实例
Microsoft Edge如何解决网页加载问题 Edge浏览器加载问题修复
如何在景安云服务器上绑定域名并配置虚拟主机?
香港服务器部署网站为何提示未备案?
Laravel如何使用Blade模板引擎?(完整语法和示例)
如何用狗爹虚拟主机快速搭建网站?
HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】
如何用PHP快速搭建高效网站?分步指南
网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?
教你用AI将一段旋律扩展成一首完整的曲子
Midjourney怎么调整光影效果_Midjourney光影调整方法【指南】
Laravel怎么使用Blade模板引擎_Laravel模板继承与Component组件复用【手册】
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
php做exe能调用系统命令吗_执行cmd指令实现方式【详解】
javascript如何操作浏览器历史记录_怎样实现无刷新导航
google浏览器怎么清理缓存_谷歌浏览器清除缓存加速详细步骤
如何快速搭建高效香港服务器网站?

