翻转再翻转!有意思的水平横向溢出滚动

网站建设4年前发布
32 0 0

20230306101628a78b0bc54c313a9360a0855621052bae5fcb7e287,最近接到一个很有意思的需求,能否做到当内容横向溢出时,依然能够使用鼠标滚轮对内容进行滚动的方法。,什么意思呢?来看看这么一种情况:,我们有一个垂直方向溢出滚动的容器,以及一个水平方向溢出滚动的容器:,20230306101628226408406b5d236b0422742d947da21b718545181,如果使用的是非触控板(大部分用户没有触控板),而是使用鼠标来进行操作,会发现,这两个容器中,只有垂直方向溢出滚动的容器,是可以响应鼠标滚轮的:,那么,这里可能就是一个用户痛点。,如果在一些特定场景下,确实有横向滚动的内容,譬如横向的图片内容展示等。又想使用鼠标滚轮对内容进行滚动,能否做到呢?,那是必须的,本文就将介绍一种可能可行的技巧,在特定场景下在水平方向溢出滚动的容器,依然可以用鼠标滚轮进行滚动。,是的,既然只有垂直方向的溢出,才能响应滚轮操作。那我们不妨从这个角度入手。,首先实现一个垂直方向的溢出:,20230306101628c4a563c67f0980d4f06025272bd4d5b8c736a278120230306101936434042793e7483c8d2e61166747b084d744e88426,既然只有垂直方向的溢出,才能响应滚轮操作。要想变成水平方向的,我们只需要给容器旋转 90° 不就行了吗?,好像有点道理,我们来尝试下:,看看效果:,2023030610162992b8ce0968ec714c53266468c7c2bbc30fb84047620230306101936b74f951554c8041283076720775809d1390e04789,这样,原本竖直的容器,就变成了水平的容器,图中鼠标没有在滚动条上容器的运动就是通过滚轮实现的。,当然,这样还有个非常严重的问题,如果容器内存在内容,那么就变成了这样:,20230306101630280fdd690f9a598c216922427c184ea961b7b641820230306101631e1ebfe812a52b45ea7455773b7bad69b42ecab302,Oh,由于容器整体旋转了 90°,里面的内容当然也一起发生了旋转。我们需要解决这个问题。,这个也好解决,我们只需要重新构造下 DOM,将原本的内容再反向旋转 90° 一次。,当然,需要同时处理好旋转中心。,整个结构变成了这样:,我们将实际装有了文字内容的 DOM 提取出来成一个单独的 DOM,与 g-pesudo 同级。,我们实际触发滚动操作的实际是 g-pesudo 的变化,我们只需要将内容通过再一次旋转,完美叠加在原本的容器之上即可:,什么意思呢。通过定位,我们将 g-content 高宽设置为容器旋转后,滚动内容的 DOM 实际表现为的高宽。,2023030610163224382a600c5df1d7b15006ff463e96c71eed88106,并且,通过设定以左下角为旋转中心 transform-origin: 0 0,再经过一次旋转,将滚动容器,和内容叠加在一起:,20230306101633069117406d585ed170095788ce0156f3346f1861120230306101634466c724121c222d1ef77146cf0571e8d46a433618,好,经过这一系列较为复杂的操作,我们就实现了内容适配旋转,给容器加上 overflow: scroll,一切表现正常,我们实现了横向滚动溢出,鼠标滚轮依旧生效!,20230306101633a3719b655583e93c3b89258ee55a8abae7ccd127220230306101937e23dc63259295473b460918565f8f143d0b6ed525,完整的代码,你可以戳:CodePen Demo -- CSS-Only Horizontal Parallax Gallery[1]。,当然,有个问题,这样滚动条就穿帮了。,这里,在现代浏览器,我们可以通过 ::-webkit-scrollbar 相关 CSS 隐藏掉整个滚动条:,这样,整个效果,就感受不到滚动条的存在,可以直接使用滚轮进行控制:,2023030610163567efd904383fd9ce1be116f6db5104a02e638f83120230306101636267b62a87abc79d9a931382dc55fa6121ae5f1195,这个技巧,只有特定的一些场景才适用。,如果内部的 DOM 复杂一点,整体改造的成本就非常高了,不太适合。,这里再给另外一个用这个技巧实现的 DEMO,一个横向 3D 纯 CSS 的视差效果,使用鼠标滚轮控制页面横向滚动:,20230306101635a401f7e9589bc716191061eac833da9e5bbc735662023030610193807854b07822159a9008586bc35bbccc58c796d767,感兴趣可以自行研究下源码,整体的技巧与上述阐述的类似,容器一次旋转,内容二次反向旋转即可。,CodePen Demo -- CSS-Only Horizontal Parallax Gallery By Paulina Hetman[2]。,好了,本文到此结束,希望对你有帮助 :),[1]CodePen Demo -- CSS-Only Horizontal Parallax Gallery: https://codepen.io/Chokcoco/pen/PoRLpGO。,[2]CodePen Demo -- CSS-Only Horizontal Parallax Gallery By Paulina Hetman: https://codepen.io/pehaa/pen/zYxbxQg。

© 版权声明

相关文章