用jQuery实现手风琴动效

我们以前有在网页上看过手风琴样式的图片切换,默认情况是这样的:
手风琴动效
图片是这样叠加在一起的,当鼠标滑动到其中一张图片上,它会进行展开,显示成一张完整的图片,同时其他几张图片会隐藏更多的部分,演示的截图如下:
这里写图片描述
这里写图片描述
图片就是这样“点谁谁展开”啦~
下面我将介绍一下这个手风琴动效的代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
    <title>Document</title>
    <style type="text/css">
        *{
            margin: 0;
            padding: 0;
        }
        .box{
            /*收缩状态 width 250px*/
            width: 1250px;
            /*展开状态下 当前图片宽度730 其他图片宽度130*/
            height: 336px;
            margin: 100px auto;
            border: 1px solid red;
        }
        .box ul{
            list-style: none;
            width: 1260px;
        }
        .box ul li{
            float: left;
            height: 336px;
            width: 250px;
        }
    </style>
    <script type="text/javascript" src="jquery-3.2.1.js"></script>
    <script type="text/javascript">
        $(function(){
            // 分别给每个li设置背景图片
            $('li').each(function(index,element){
                $(element).css("background", "url('./images/"+ (index+1) +".jpg')");
            })

            // 鼠标移动时改变li的宽度
            $('li').mouseenter(function(){
                // 当前li的宽度增加为730px,其他li都是为130px
                // 在开始一个动画之前先停止之前已经在执行的动画,否则新的动画会自动的添加到动画队列中,等待前一个动画执行完毕后再开始执行
                $(this).stop().animate({width:730},1000).siblings('li').stop().animate({width:130},1000);;
            })
            // 鼠标离开时恢复初始状态
            $('li').mouseout(function(){
                $('li').stop().animate({width:250},1000);
            })
        })
    </script>
</head>
<body>
    <div class="box">
        <ul>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
        </ul>
    </div>
</body>
</html>

以上就是完整的手风琴动效的图片切换的代码了,需要注意的点就是需要计算好每张图片显示的宽度,同时,滑动鼠标时会发现图片一直滑动,那么解决这个问题的方法就是在动画开始之前使用stop(),这个函数的作用是在开始一个动画之前停止前一个正在执行的动画,这样可以避免图片一直滑动的问题。
通过这个案例,我们可以了解到jQuery的代码十分的简短,一开始遇到这个问题的时候思路是将图片叠加起来再不停改变其z-index,发现自己想的复杂了,其实只要改变图片的宽度就可以实现,这个案例告诉我们问题的解决方法不止一种,我们要善于去想出一个最简单易懂的方法,这样可以帮助我们节省很多的时间和精力。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个使用 jQuery 实现手风琴和箭头旋转的示例代码: HTML代码: ``` <div class="accordion"> <div class="accordion-header"> <h3>标题1</h3> <i class="arrow"></i> </div> <div class="accordion-body"> <p>内容1</p> </div> <div class="accordion-header"> <h3>标题2</h3> <i class="arrow"></i> </div> <div class="accordion-body"> <p>内容2</p> </div> <div class="accordion-header"> <h3>标题3</h3> <i class="arrow"></i> </div> <div class="accordion-body"> <p>内容3</p> </div> </div> ``` CSS代码: ``` .accordion { border: 1px solid #ddd; } .accordion-header { display: flex; align-items: center; justify-content: space-between; padding: 10px; cursor: pointer; background-color: #f7f7f7; } .accordion-header:hover { background-color: #e5e5e5; } .accordion-header h3 { margin: 0; } .accordion-body { max-height: 0; overflow: hidden; transition: max-height 0.3s ease-out; } .accordion-body p { margin: 0; padding: 10px; } .arrow { width: 0; height: 0; border-style: solid; border-width: 5px 5px 0 5px; border-color: #999 transparent transparent transparent; transition: transform 0.3s ease-out; } .arrow.active { transform: rotate(180deg); } ``` jQuery代码: ``` $(document).ready(function() { $('.accordion-header').click(function() { $(this).toggleClass('active'); $(this).next('.accordion-body').slideToggle(); $(this).find('.arrow').toggleClass('active'); $('.accordion-header').not(this).removeClass('active'); $('.accordion-header').not(this).next('.accordion-body').slideUp(); $('.accordion-header').not(this).find('.arrow').removeClass('active'); }); }); ``` 这段代码实现了一个手风琴下拉菜单,并且点击标题时箭头会旋转。您可以根据需要进行修改和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值