Webpack 官网文字滚动特效

Webpack 官网文字滚动特效

先来看看 👉Webpack 官网👈 的效果
在这里插入图片描述

来看看我自己实现的
在这里插入图片描述

HTML

首先下面的代码确实没有格式化, 而且是被我故意写成这样的. 因为 HTML 中的换行符是会被显示出来的. 如下图
在这里插入图片描述

第一个 div.rotate 是固定宽高, 因为这样才能通过 overflow: hidden 使超出的子元素隐藏.

第二个 div.wrapper 和父元素宽度一样(2em), 才导致了两个 span 没有在同一行显示, 而是在不同行.

<body>
  <h1>
    <span>欢迎来到</span><div class="rotate"><div class="wrapper">
        <span>中国</span>
        <span>北京</span>
      </div>
    </div>
  </h1>
  <button onclick="toggleUpClass()">goUp</button>
</body>

CSS

首先, 取消 <body><h1>paddingmargin. 并设置 <body> flex 布局使子元素垂直水平居中.

设置第一个 div.rotate inline-block 才不会换行. 具体 height 为多少, 这个需要自己手动在浏览器工具里调试.

最后一个类 goUp, 帮助第二个 div.wrapper 上移 50% 高度从而第二个 span 显示出来.

body, h1 {
  padding: 0;
  margin: 0;
}

body {
  display: flex;
  justify-content: center;
  align-items: center;
  min-height: 100vh;
}

.rotate {
  display: inline-block;
  vertical-align: bottom;
  width: 2em;
  height: 43px;
  overflow: hidden;
  background-color: skyblue;
  padding: 0 .3rem;
}
.goUp {
  transition: transform .5s ease-in-out;
  transform: translateY(-50%);
}

JavaScript

主要在于, 点击按钮时给第二个 div.wrapper 添加 goUp 类. 在 transition 结束时, 也是就 500ms 后, 取消这个类. 📕取消之后, div.wrapper 的滚动就失效了, 展现的仍是第一个 span 内容.

因此要将之前滚动的第二个 span 内容变成第一个 span 内容. 才不会发现猫腻.

let wrapper = document.querySelector('.wrapper');
function toggleUpClass() {
  wrapper.classList.toggle('goUp');
  const firstSpanHtml = wrapper.lastElementChild.innerHTML;
  setTimeout(() => {
    wrapper.classList.toggle('goUp');
    wrapper.innerHTML = `
      <span>${firstSpanHtml}</span>
      <span>${Math.random().toString().substr(2,3)}</span>
    `;
  }, 500);
}

内容就是这些啦, 谢谢你看到这里😀

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值