【问题标题】:Scrolling animation issue using Greensock使用 Greensock 的滚动动画问题
【发布时间】:2017-11-22 08:49:52
【问题描述】:

我正在使用 GreenSock(https://greensock.com/get-started-js) 制作动画。

问题是,当我向下滚动鼠标滚轮时,动画从右到左工作。这不是一项权利。我需要当鼠标滚轮向上然后从右到左动画并且鼠标滚轮向下然后从左到右动画。我需要一个快速滚动。

当鼠标滚轮滚动的速度比从右到左的快,反之亦然?

我尝试了一些代码但无法正常工作。

你能帮我解决这个问题吗?

/*scroll the page horizontal*/
(function() {
  var content = document.getElementById("content"); // container of scrollable content
  var xScroll = 0;  // initialize virtual scroll position
  var ignore = false; // ignore flag, decides whether xScroll needs to be updated (user scrolls via scrollbar) or not (user scrolls via mousewheel)
    function scrollHorizontally(e) {
        // every browser gives another e.deltaY -> only get the current direction and set an own speed
        var direction = (e.deltaY>0) ? 1 : -1;
        xScroll = xScroll+direction*120; // calculate new virtual scroll positon -> scroll position at the end of animation
        // set limits to avoid overshooting and stucking at beginning or end
        var max = content.scrollWidth - content.clientWidth;
          if (xScroll <= 0) {
              xScroll = 0;
          } else if (xScroll >= max) {
              xScroll = max;
          }
        ignore = true; // user scrolls via mousewheel -> block updates of xScroll until animation ahs finished
        // scroll smooth to xScroll
        TweenLite.to(content, 1, { ease: Power1.easeOut, scrollTo:{x:xScroll} });
        e.preventDefault();
    }
    function updateXScroll(e) {
        if (xScroll == content.scrollLeft) {
          // scroll animation has finished -> reset ignore flag -> xScroll will be updated again
          ignore = false;
        }
        if (!ignore) {
          // if scroll event was NOT fired by mousewheel, update xScroll
          xScroll = content.scrollLeft;
        }
    }
   if (content.addEventListener) {
        // Standard
        content.addEventListener("scroll", updateXScroll, false); // update xScroll at scrollbar scrolls
        content.addEventListener("wheel", scrollHorizontally, false); // make smooth scroll animation when srolling via mousewheel
    } else {
        // IE 6/7/8
        content.attachEvent("onmousewheel", scrollHorizontally);
    }

})();
#content {
   position:fixed;
display: inline-block;
overflow-x: scroll;
width: 100%;
overflow-y: hidden;
top: 0;
right:0;
height: 100%;
}
#content > div{
    overflow: hidden;
    width:350%;/*to increase the width */
}
.horizontal_scroll .full_screen_100
{
    height: 100%;
    background-color: #fff;
    display: flex;
}
.horizontal_scroll .full_screen_100 article{
    width: 900px;
    height: 100%;
    float:left;
    border-left: solid 1px #E2E2E2;

}
<div id="content">
        <div class="horizontal_scroll">
        <div class="full_screen_100">
            <article>
                <span class="page_slogan">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
            tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
            quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
            consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
            cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
            proident, sunt in culpa qui officia deserunt mollit anim id est laborum. </span>

        </article>

            <article>
                <span class="page_slogan">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
            tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
            quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
            consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
            cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
            proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</span>

        </article>

            <article>
                <span class="page_slogan">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
            tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
            quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
            consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
            cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
            proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</span>
        </article>

            <article>
                <span class="page_slogan">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
            tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
            quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
            consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
            cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
            proident, sunt in culpa qui officia deserunt mollit anim id est laborum. </span>
        </article>

            <article>
                <span class="page_slogan">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
            tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
            quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
            consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
            cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
            proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</span>
        </article>

            <article>
                <span class="page_slogan">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
            tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
            quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
            consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
            cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
            proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</span>
        </article>

     </div>
    </div>
    </div>

 <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/gsap/1.20.2/plugins/CSSPlugin.min.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/gsap/1.20.2/TweenLite.min.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/gsap/1.20.3/plugins/ScrollToPlugin.min.js"></script>

【问题讨论】:

    标签: javascript jquery html scroll gsap


    【解决方案1】:

    只需去掉delta*40之前的减号(-

    TweenLite.to(content, 0.5, {scrollTo:{x:content.scrollLeft - (delta*40)}})
    

    (function() {
        var content = document.getElementById("content");
        function scrollHorizontally(e) {
    
            e = window.event || e;
            var delta = Math.max(-1, Math.min(1, (e.wheelDelta || -e.detail)));
           // ; // Multiplied by 40
            TweenLite.to(content, 0.5, {scrollTo:{x:content.scrollLeft - (delta*40)}})
            e.preventDefault();
        }
        if (content.addEventListener) {
            // IE9, Chrome, Safari, Opera
            content.addEventListener("mousewheel", scrollHorizontally, false);
            // Firefox
            content.addEventListener("DOMMouseScroll", scrollHorizontally, false);
        } else {
            // IE 6/7/8
            content.attachEvent("onmousewheel", scrollHorizontally);
        }
    })();
    #content {
       position:fixed;
    display: inline-block;
    overflow-x: scroll;
    width: 100%;
    overflow-y: hidden;
    top: 0;
    right:0;
    height: 100%;
    }
    #content > div{
        overflow: hidden;
        width:250%;/*to increase the width */
    }
    .horizontal_scroll .full_screen_100
    {
        height: 100%;
        background-color: #fff;
        display: flex;
    }
    .horizontal_scroll .full_screen_100 article{
        width: 900px;
        height: 100%;
        float:left;
        border-left: solid 1px #E2E2E2;
    
    }
    <div id="content">
            <div class="horizontal_scroll">
            <div class="full_screen_100">
                <article>
                    <span class="page_slogan">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
                tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
                quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
                consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
                cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
                proident, sunt in culpa qui officia deserunt mollit anim id est laborum. </span>
    
            </article>
    
                <article>
                    <span class="page_slogan">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
                tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
                quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
                consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
                cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
                proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</span>
    
            </article>
    
                <article>
                    <span class="page_slogan">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
                tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
                quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
                consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
                cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
                proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</span>
            </article>
    
                <article>
                    <span class="page_slogan">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
                tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
                quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
                consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
                cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
                proident, sunt in culpa qui officia deserunt mollit anim id est laborum. </span>
            </article>
    
                <article>
                    <span class="page_slogan">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
                tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
                quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
                consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
                cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
                proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</span>
            </article>
    
                <article>
                    <span class="page_slogan">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
                tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
                quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
                consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
                cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
                proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</span>
            </article>
    
         </div>
        </div>
        </div>
    
     <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
    <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/gsap/1.20.2/plugins/CSSPlugin.min.js"></script>
    <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/gsap/1.20.2/TweenLite.min.js"></script>
    <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/gsap/1.20.3/plugins/ScrollToPlugin.min.js"></script>

    【讨论】:

    • 是的,一个问题得到了解决。感谢您的帮助。我的第二个问题需要你的帮助。我的意思是当我滚动快速滚轮时,滚动条仍在滚动显示。
    • @NarendraVerma 在同一行中,第二个参数是过渡时间:TweenLite.to(content, 0.5, {scrollTo:{x:content.scrollLeft - (delta*40)}})。这里设置为 0.5 秒。只需将其降低以缩短过渡时间。
    • 如果我从 0.5 更改为 0.2,则滚动部分不会呈线性变化。我的意思是我必须流畅地滚动
    • @NarendraVerma 我不确定我是否理解你。如果你把那个时间设置为0,就没有过渡,会跳转到下一个滚动位置。
    • 再次感谢您的回复,我正在尝试制作这样的动画tentwenty.me/about-us
    猜你喜欢
    • 1970-01-01
    • 2012-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多