用js实现页面卷动逐行滑入效果【建议收藏】

在我们的前端页面里面,想要实现图片根据页面的滑动然后逐行滑入或者退出的效果,大家还在担心不会做吗?博主在这里就做一个相关技术分享,创作不易,请大家不要吝啬手中的三连!!!

1、先看效果 

 

2、上代码

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    :root {
      --device-width: 770px;
      --device-height: 1336px;
      --ui-width: 640px;
      font-size: 15px;
    }

    body {
      background-color: #000;
      margin: 0;
      display: flex;
      flex-direction: column;
      justify-content: center;
      align-items: center;
      min-height: 100vh;
      font-family: Helvetica;
      padding: 4rem 0;
    }

    h2 {
      color: #6e6e73;
      text-align: center;
      font-size: 4.5rem;
      font-weight: 600;
      margin: 6rem 0;
    }

    h2 p {
      margin: 0;
      color: #fff;
    }

    #iphone {
      position: relative;
      width: var(--device-width);
      height: var(--device-height);
    }

    #hardware {
      width: 100%;
      height: 100%;
      background-image: url(https://assets.codepen.io/2002878/iphone12-5g_on_phone.jpg);
      background-size: var(--device-width) var(--device-height);
    }

    #ui {
      position: absolute;
      top: 0;
      left: 50%;
      transform: translateX(-50%);
    }

    #ui .top-ui {
      display: block;
      width: var(--ui-width);
      height: auto;
      margin: 70px auto 0;
    }

    #ui ul {
      list-style: none;
      margin: 0;
      padding: 0;
    }

    #ui ul li img {
      display: block;
      width: var(--ui-width);
      margin: 10px auto;
      transform: scale(calc(1.8 - (0.8 * var(--progress)))) translateY(calc(-60px * (1 - var(--progress))));
      opacity: var(--progress);
    }
  </style>
</head>

<body>
  <h2>
    Superfast wireless
    <p>Hello 5G.</p>
  </h2>
  <div id="iphone">
    <div id="hardware"></div>
    <div id="ui">
      <img src="https://assets.codepen.io/2002878/iphone12-5g_top_ui.jpg" class="top-ui" alt="">

      <ul>
        <li>
          <img src="https://assets.codepen.io/2002878/iphone12-5g_show_01.jpg" />
        </li>
        <li>
          <img src="https://assets.codepen.io/2002878/iphone12-5g_show_02.jpg" />
        </li>
        <li>
          <img src="https://assets.codepen.io/2002878/iphone12-5g_show_03.jpg" />
        </li>
        <li>
          <img src="https://assets.codepen.io/2002878/iphone12-5g_show_04.jpg" />
        </li>
        <li>
          <img src="https://assets.codepen.io/2002878/iphone12-5g_show_05.jpg" />
        </li>
        <li>
          <img src="https://assets.codepen.io/2002878/iphone12-5g_show_06.jpg" />
        </li>
        <li>
          <img src="https://assets.codepen.io/2002878/iphone12-5g_show_07.jpg" />
        </li>
      </ul>
    </div>
  </div>

  <script>
    const rows = document.querySelectorAll('#ui ul li')
    const html = document.documentElement

    document.addEventListener("scroll", (e) => {
      let scrolled = html.scrollTop / (html.scrollHeight - html.clientHeight)

      let total = 1 / rows.length

      for (let [index, row] of rows.entries()) {
        let start = total * index
        let end = total * (index + 1)

        let progress = (scrolled - start) / (end - start)
        if (progress >= 1) {
          progress = 1
        }
        if (progress <= 0) {
          progress = 0
        }

        row.style.setProperty('--progress', progress)
      }
    })
  </script>
</body>

</html>

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值