gpt4 book ai didi

javascript - 水平平滑动量滚动

转载 作者:行者123 更新时间:2023-12-03 16:16:22 25 4
gpt4 key购买 nike

问题:我需要平滑一些鼠标滚轮 水平 滚动到此布局:https://jsfiddle.net/38qLnzkh/ .
备选:我发现这个脚本完全符合我的要求,但它似乎只能垂直工作:Butter.js .如果你能让它水平工作,它可能会解决我所有的问题。
重要提示:
1. 应根据屏幕宽度和触摸设备禁用脚本。
2. 它应该在您在 fiddle 中看到的所有内容之上提供一个菜单。
先感谢您。
编辑:
如果不清楚我需要什么,这里有两个例子,我正在寻找效果:
https://nemesiscorporation.com/
https://www.tentwenty.me/about-us

我的布局:
HTML:

<main class="outer-wrapper">
<div class="wrapper">
<article class="section" id="a"><h2>01</h2></article>
<article class="section" id="b"><h2>02</h2></article>
<article class="section" id="c"><h2>03</h2></article>
<article class="section" id="d"><h2>04</h2></article>
<article class="section" id="e"><h2>05</h2></article>
<article class="section" id="f"><h2>06</h2></article>
</div>
</main>
CSS:
.outer-wrapper {
width: auto;
height: 100vw;
transform: rotate(-90deg) translateX(-100vh);
transform-origin: top left;
overflow-y: scroll;
overflow-x: hidden;
position: absolute;
scrollbar-width: none;
-ms-overflow-style: none;
}
::-webkit-scrollbar {
display: none;
}

.wrapper {
display: flex;
flex-direction: row;
width: auto;
transform: rotate(90deg) translateY(-100vh);
transform-origin: top left;
margin: 0;
padding: 0;
}

.section {
color: #000;
width: 100vw;
height: 100vh;
}

最佳答案

我在 github 上发布了一个 API,可以轻松解决这个问题,下面你会找到代码来做你想做的事。
与您的相比,我刚刚添加了 js 代码和 <script>在 HTML 中。
如果您想了解更多,here you can find the documentation .
编辑
由于要求发生了一些变化并且 API 已经更新,我已经修改了下面的示例,以便它更好地适应问题。
答案的主要变化:

  • 现在 js 在 init() 内方法称为 onload
  • 修改了 CSS 样式(transform:rotate 制动了大多数滚动 API)
  • 增加了对导航栏平滑滚动的支持
  • 滚动量现在取决于用户物理滚动鼠标滚轮的程度

  • /* UPDATED 2022 ANSWER */
    function init() {
    /*
    * Variables preparation
    */
    let yourWrapperElement = document.getElementsByClassName("outer-wrapper")[0];
    let whateverEaseFunctionYouWant = remaningScrollDistance => { return remaningScrollDistance / 15 + 1 };

    //Added support for navbar menu's smooth scrolling
    uss.hrefSetup();

    /*
    * As you asked for, we only apply the custom scrolling for desktop devices
    * by using the "wheel" event instead of the "scroll" or "touchmove" events.
    */
    yourWrapperElement.addEventListener("wheel", event => {
    /*
    * We want to overwrite the default scrolling behaviour
    * of your outer-wrapper component.
    */
    event.preventDefault();
    event.stopPropagation();
    uss.scrollXBy(event.deltaY, yourWrapperElement, null, false);
    }, {passive:false});

    /*
    * We apply a the custom ease function
    * which will be used whenever our component is scrolled by the API
    */
    uss.setXStepLengthCalculator(whateverEaseFunctionYouWant, yourWrapperElement);
    }
    body {
    margin: 0;
    padding: 0;
    }

    .outer-wrapper {
    width: auto;
    height: 100vh; /* Changed to vh */
    width: 100vw; /* Added */
    /*transform: rotate(-90deg) translateX(-100vh); ROTATING containers brakes 90% of scrolling APIs
    transform-origin: top left;*/
    overflow-y: scroll;
    overflow-x: hidden;
    position: absolute;
    scrollbar-width: none;
    -ms-overflow-style: none;
    /*scroll-behavior: smooth; ISN'T NEEDED FOR MY API */
    }

    ::-webkit-scrollbar {
    display: none;
    }

    .wrapper {
    display: flex;
    flex-direction: row;
    /*width: auto; NOT NEEDED IF WE USE FLEX-SHRINK 0
    transform: rotate(90deg) translateY(-100vh); ROTATING containers brakes 90% of scrolling APIs
    transform-origin: top left;*/
    margin: 0; /* not really needed */
    padding: 0; /* not really needed */
    }

    .section {
    color: #000;
    flex-shrink: 0; /* ADDED insted of the width/height of the wrapper */
    width: 100vw;
    height: 100vh;
    }

    #a { background-color: #ccc; }
    #b { background-color: #fff; }
    #c { background-color: #ccc; }
    #d { background-color: #fff; }
    #e { background-color: #ccc; }
    #f { background-color: #fff; }


    h2 {
    text-align: center;
    font-size: 200px;
    margin: 0;
    }



    /* MENU _________________________ */



    .logo {
    float: left;
    }

    nav {
    width: 100%;
    }

    /* HEADER */

    header {
    float: left;
    width: 100%;
    position: absolute;
    z-index: 9999;
    }


    /* HEADER LARGE */

    header.large {
    height: 50px;
    }

    header.large .logo {
    width: 225px;
    height: 50px;
    margin: 20px 0 0 20px;
    background: url('../images/logo-fireqa-green-500px.png');
    background-repeat: no-repeat;
    background-size: contain;

    transition: 0.7s all;
    -moz-transition: 0.7s all;
    -webkit-transition: 0.7s all;
    -o-transition: 0.7s all;
    }


    /* UNORDERED LIST */

    header.large ul {
    list-style: none;
    float: right;
    margin-right: 25px;
    }
    header.small ul {
    list-style: none;
    float: right;
    margin: 0;
    }

    header.large li {
    display: inline;
    float: left;
    list-style-position: inside;
    height: 50px;
    -webkit-transition: all ease 0.3s;
    -moz-transition: all ease 0.3s;
    transition: all 0.3s ease-in-out;
    }


    header.large li a {
    display: block;
    padding: 20px;
    color: #0E6245;
    text-decoration: none;
    font-family: 'Montserrat', 'arial', sans-serif;
    font-weight: 600 !important;
    letter-spacing: -1px;
    font-size: 25px;

    background-image: linear-gradient(#0E6245, #0E6245);
    background-position: 50% 80%;
    background-repeat: no-repeat;
    background-size: 0% 4px;

    -moz-transition: all 0.3s ease-in-out 0s;
    -ms-transition: all 0.3s ease-in-out 0s;
    -o-transition: all 0.3s ease-in-out 0s;
    -webkit-transition: all 0.3s ease-in-out 0s;
    transition: all 0.3s ease-in-out 0s;
    }

    header.large li a:hover, a:focus {
    background-size: 60% 4px;
    }
    <script src = "https://cdn.jsdelivr.net/npm/universalsmoothscroll@latest/universalsmoothscroll-min.js"></script>

    <body onload = init()>


    <main class="outer-wrapper">
    <div class="wrapper">
    <article class="section" id="a"><h2>01</h2></article>
    <article class="section" id="b"><h2>02</h2></article>
    <article class="section" id="c"><h2>03</h2></article>
    <article class="section" id="d"><h2>04</h2></article>
    <article class="section" id="e"><h2>05</h2></article>
    <article class="section" id="f"><h2>06</h2></article>
    </div>
    </main>


    <!-- MENU _____________________ -->


    <header class="large">
    <div class="container">
    <nav>
    <a><div class="logo"></div></a>
    <ul>
    <li><a href="#a">01</a></li>
    <li><a href="#b">02</a></li>
    <li><a href="#c">03</a></li>
    <li><a href="#d">04</a></li>
    </ul>
    </nav>
    </div>
    </header>

    </body>
    </html>

    关于javascript - 水平平滑动量滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65269017/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com