手风琴轮播图

本文介绍了一种使用CSS和JavaScript结合的方式,实现图片列表在鼠标悬停时宽度动态变化的效果,通过自定义函数获取元素样式,利用变速动画更改元素宽度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代码:

<style>
  ul {
    list-style: none;
  }
  * {
    margin: 0;
    padding: 0;
  }

  div {
    width: 1150px;
    height: 400px;
    margin: 50px auto;
    border: 1px solid red;
    overflow: hidden;
  }

  div li {
    width: 240px;
    height: 400px;
    float: left;
  }

  div ul {
    width: 1300px;
  }
</style>  
<div id="box">
  <ul>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
  </ul>
</div>
<script src="common.js"></script>
<script>
  //获取样式
  function getStyle(element,attr) {
    return window.getComputedStyle? window.getComputedStyle(element,null)[attr]:element.currentStyle[attr]||0;
  }
  //变速动画 更改多个属性的值
  function animate(element,json,fn) {
    clearInterval(element.timeId);
    element.timeId=setInterval(function () {
      var flag=true;
      for(var attr in json){
        var current=parseInt(getStyle(element,attr));
        var target=json[attr];
        var step=(target-current)/10;
        step=step>0?Math.ceil(step):Math.floor(step);
        current+=step;
        element.style[attr]=current+"px";
        if(current!=target){
          flag=false;
        }
      }
      if(flag){
        clearInterval(element.timeId);
        if(fn){
          fn();
        }
      }
    },20);
  }

  var liObjs=document.getElementById("box").children[0].children;
  for(var i=0;i<liObjs.length;i++){
    liObjs[i].style.backgroundImage="url(images/"+(i+1)+".jpg)";
    liObjs[i].onmouseover=mouseoverHandle;
    liObjs[i].onmouseout=mouseoutHandle;
  }
  function mouseoverHandle(){
    for(var i=0;i<liObjs.length;i++) {
      animate(liObjs[i], {"width": 100});
    }
      animate(this,{"width":800});
  }
  function mouseoutHandle(){
    for(var i=0;i<liObjs.length;i++){
      animate(liObjs[i],{"width":240});
    }
  }
</script>

备注: 图片命名方式为 num.jpg 格式 且从一开始 如,1.jpg,2.jpg等
效果图:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值