如何在 javascript 和/或 css 中向下滚动时水平移动 div

2023-12-15

有谁知道我怎样才能获得像本网站底部那样的轮播效果https://brand.twitch.tv/ ??

我使用了在 codepen 中找到的这个示例来了解本节的结构。

但是当尝试使用垂直滚动将其添加到我的网站时,它不是像 twitch 网站中那样的连续滚动,而是另一个滚动中的滚动。这对用户来说感觉很奇怪,如果向下滚动太快,您可能会错过它。

提前致谢!

https://codepen.io/lemmin/pen/xRyXMZ

    body {
      margin:0;
      font-family:Georgia;
    }
    #container .box {
      width:100vw;
      height:100vh;
      display:inline-block;
      position:relative;
    }
    #container .box > div {
      width:100px;
      height:100px;
      font-size:96px;
      color:#FFF;
      position:absolute;
      top:50%;
      left:50%;
      margin:-50px 0 0 -50px;
      line-height:.7;
      font-weight:bold;
    }
    #container {
      overflow-y:scroll;
      overflow-x:hidden;
      transform: rotate(270deg) translateX(-100%);
      transform-origin: top left;
      background-color:#999;
      position:absolute;
      width:100vh;
      height:100vw;
    }
    #container2 {
      transform: rotate(90deg) translateY(-100vh);
      transform-origin: top left;
      white-space:nowrap;
      font-size:0;
    }
    
    .one {
      background-color: #45CCFF;
    }
    .two {
      background-color: #49E83E;
    }
    .three {
      background-color: #EDDE05;
    }
    .four {
      background-color: #E84B30;
    }
    <div id="container">
      <div id="container2">
        <div class="box one"><div>1</div></div>
        <div class="box two"><div>2</div></div>
        <div class="box three"><div>3</div></div>
        <div class="box four"><div>Last</div></div>
      </div>
    </div>

实现此目的的一种方法是使用卷轴魔法。学习曲线有点陡峭,但回报是值得的。

https://codepen.io/sean_pwc/pen/wvaaYWE

我已经分叉了你的笔并稍作修改。这是它的工作原理。

1) 我们添加了一堆 div,我们希望它们成为正常页面滚动的一部分。这里没什么新鲜事。

<div class="scroll-vertical">
   <div class="v-box one">1</div>
   <div class="v-box two">2</div>
   <div class="v-box three">3</div>
   <div class="v-box four">Last</div>
</div>

我将高度设置为 300 像素,并且这些框占据了屏幕的整个宽度。然后我们添加一个我们想要水平滚动的部分。请注意盒子上样式的变化 - flex-direction 设置为 row,以便盒子彼此相邻,并且我们在它们上设置宽度。

<div id="scrollHorizontal">
   <div class="h-box one">1</div>
   <div class="h-box two">2</div>
   <div class="h-box three">3</div>
   <div class="h-box four">4</div>
</div>

魔法来了。

var controller = new ScrollMagic.Controller();

var scrollHorizontal = new TimelineLite()
  scrollHorizontal.to("#scrollHorizontal", 1, {x:'-100%'})

var horizontalScroll = new ScrollMagic.Scene({
      triggerElement: "#scrollHorizontal",
      triggerHook: 'onLeave',
      duration: 3000
    }).setPin("#scrollHorizontal").setTween(scrollHorizontal).addTo(controller);

我建议您阅读docs并尝试演示以了解发生了什么。但本质上你设置了一个包含动画的控制器。

var controller = new ScrollMagic.Controller();

然后我们定位我们想要移动的元素。在这里,我们的目标是 #scrollHorizo​​ntal,它是 h 框的包装器,然后我们告诉它自己一直向左移动,直到它离开屏幕。就像您将侧面导航放置在屏幕之外一样。

var scrollHorizontal = new TimelineLite()
  scrollHorizontal.to("#scrollHorizontal", 1, {x:'-100%'})

现在这样就可以了,但是垂直滚动仍然会生效,而且感觉不太好。因此,我们将要滚动的元素固定到屏幕顶部 - 本质上,scrollmagic 添加了一堆空白(由持续时间键设置,其高度以像素为单位),用户可以滚动它,但它隐藏在固定后面,我们只是看到你在scrollHorizo​​ntal中设置发生的任何事情(完全向左移动)。

var horizontalScroll = new ScrollMagic.Scene({
      triggerElement: "#scrollHorizontal",
      triggerHook: 'onLeave',
      duration: 3000
    }).setPin("#scrollHorizontal").setTween(scrollHorizontal).addTo(controller);

因此,我们设置一个目标元素,当浏览器检测到它时,该元素将被固定,您在 newTimelineLite() 中声明的动画将在您设置的持续时间内执行,然后当持续时间结束时,我们取消固定并继续回到自然的垂直滚动。调整持续时间来改变水平滚动的速度。

参考:

https://scrollmagic.io/ https://scrollmagic.io/docs/index.html

EDIT

我应该补充一下,codepen 使用了 4 个脚本:

https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js
https://cdnjs.cloudflare.com/ajax/libs/gsap/2.1.3/TweenMax.min.js
https://cdnjs.cloudflare.com/ajax/libs/ScrollMagic/2.0.7/ScrollMagic.min.js
https://cdnjs.cloudflare.com/ajax/libs/ScrollMagic/2.0.7/plugins/animation.gsap.min.js
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 javascript 和/或 css 中向下滚动时水平移动 div 的相关文章

随机推荐

  • 访问本地类中的隐藏变量

    我是 Java 新手 我对下面的示例感到困惑 public class Test int testOne member method int x 5 class inTest local class in member method voi
  • Python石头剪刀布游戏

    我正在使用Python 我正在尝试编写一个简单的程序来模拟石头 剪刀 布游戏 一切正常 除了当我收到此错误时输入无效响应 石头 布或剪刀以外的其他内容 时 Traceback most recent call last File C Use
  • SpriteKit 游戏中的 AVAudioPlayer 和性能问题

    我在使用 AVAudioPlayer 和在 spritekit 游戏中播放短声音时遇到问题 我有相当动态的游戏场景 当用户点击特定元素时 我想播放简单的 嘟嘟 声音 但我注意到使用 AVAudioPlayer 执行声音会导致严重的性能问题
  • flutter:参数格式不正确

    我是 Flutter 新手 今天我一直遇到一个问题 我无法调试我的应用程序 因为它说参数格式不正确 Parameter format not correct FAILURE Build failed with an exception Wh
  • httpurlconnection线程安全

    HttpUrlConnection 线程安全吗 IE 如果我有一个连接到服务器的 HttpConnection 实例 并且该实例由不同的线程使用 例如尝试同时发送 POST HttpUrlConnection 将如何处理这种情况 a 他们会
  • 如何将表格包裹在链接中?

    哪些元素允许链接 我想要wrap围绕 a 的链接table a href 123 php class grap table border 1 style width 600px height 600px tbody tr td align
  • MongoDB节点检查objectid是否有效

    如何使用 Node 的驱动程序检查 ObjectID 是否有效 我试过 var BSON mongo BSONPure console log Validity BSON ObjectID isValid ddsd 但我不断收到异常 而不是
  • select() 没有响应 /dev/input/mice 上的写入

    我正在编写一个程序来监视select 键盘和鼠标设备文件 它等待这些文件上的任何写入操作 这应该在有击键或鼠标移动时发生 并且一旦有写入操作 就会执行一些作业 但这不起作用 我的代码如下 include
  • 如何在 Xcode 8 中使用 Swift 3 创建 ManagedObjectContext?

    尝试在视图控制器中创建新上下文时 在新的 Xcode 8 使用 Swift 3 iOS 10 中遇到问题 AppDelegate 类型的值没有成员 managementObjectContext let context UIApplicat
  • 如何将 HTML 字符串注入到元素中?

    使用 Mootools 我们可以将一个元素注入另一个元素 childID inject parentID top 第二个参数允许我控制位置 可以是 顶部 或 底部 以将其注入到父对象中 也可以是 之前 或 之后 以将其作为同级对象注入 我们
  • 将两种表单中的数据作为 Angular 中的一个对象发布

    这是我在 Angular 上的第一个项目 我已经尽我所能 我会尝试自己完成它 但我觉得我需要帮助 项目简介 我有课mod ts export interface Mod id number name string clauseList Cl
  • 带分散聚集的 MPI 矩阵乘法

    我正在尝试使用 C 中的 MPI 进行矩阵乘法 我们必须做一个顺序版本和一个并行版本 我的并行版本没有给出正确的答案 我不知道为什么 我认为我没有向进程发送正确的通信 但我不能确定 教授只是回顾了不同的发送 接收 收集等消息 但并没有真正深
  • USB 设备的 SetupComm、SetCommState、SetCommTimeouts 失败

    我正在打开一个 USB 设备 用于通信使用CreateFile HANDLE hUsb CreateFile LCLD9 GENERIC READ GENERIC WRITE 0 null OPEN EXISTING FILE FLAG O
  • UITableViewCell 阴影

    我正在尝试实现这个设计 但我浏览过的所有解决方案都不起作用 据我了解 这可能是因为单元格和 UITableView 之间的间距所致 设计如下 所以基本上我想要实现的是从所有 4 个侧面都有阴影以及每个单元格和下一个单元格之间的一些间距 谢谢
  • 与 Surefire 并行运行测试并使用 TestNG Jenkins 插件正确显示它们

    我正在使用 Surefire 运行并行执行测试 一切似乎都工作正常 但是 在 target surefire reports 文件夹中只生成了一个 testng results xml 其中 仅包含最后运行的测试的结果 我发现了一个与旧版本
  • Cortana 技能不适用于 Windows 10 或 iOS

    我使用 Microsoft Bot Framework 添加了 Cortana 技能 我的召唤短语是 我的技能 当我尝试在 iOS 或 Windows 中与 Cortana 交谈时 它不会调用该技能 相反 它一直引导我访问 Bing 结果
  • PHP 函数使用 scrape 方法抓取远程站点上

    有人有一个 PHP 函数可以抓取远程站点上特定 DIV 内的所有链接吗 所以用法可能是 links grab links url divname 并返回一个我可以使用的数组 抓取链接我可以弄清楚但不知道如何让它只在特定的 div 内执行 谢
  • Visual Studio 中 KeyDown 事件、KeyPress 事件和 KeyUp 事件之间的区别

    谁能告诉我两者之间的区别KeyDown事件 KeyPress事件和KeyUp事件 我查了msdn网站 没有太多解释 谁能用简单的逻辑意义告诉我每个事件发生的时间 我感觉上述所有事件都是在按下某个键时发生的 那么它们之间的具体区别是什么呢 M
  • 以不同颜色显示 R 热图异常值

    希望用不同的颜色标记 R 矩阵中的异常值 假设我的数据为 1 2 4 2 5 5 4 3 2 3 1 500 5 4 2 现在我想用不同的颜色标记 500 用热图的默认颜色标记矩阵的其余部分 有人可以指导我完成整个过程吗 这是实现这一目标的
  • 如何在 javascript 和/或 css 中向下滚动时水平移动 div

    有谁知道我怎样才能获得像本网站底部那样的轮播效果https brand twitch tv 我使用了在 codepen 中找到的这个示例来了解本节的结构 但是当尝试使用垂直滚动将其添加到我的网站时 它不是像 twitch 网站中那样的连续滚