【问题标题】:How to start animation after scrolling over an element?滚动元素后如何启动动画?
【发布时间】:2012-11-06 04:22:12
【问题描述】:

有谁知道是否有一个 JQuery 插件可以在滚动对象后启动动画?

或者如果没有插件在我滚动对象后使用 JQuery 启动 CSS3 转换?

我正在尝试复制这样的内容http://heymosaic.com/

感谢任何帮助,谢谢!

【问题讨论】:

  • 就像用户将鼠标悬停在元素上,当鼠标移开时开始动画?

标签: jquery jquery-animate css-transitions


【解决方案1】:

他们不使用 mouseover/mouseout 事件来触发动画,而是使用窗口的滚动位置。这样的事情会起作用:

jQuery('div#down_the_page').focus(function() {
  // animate when div#down_the_page is visible in the viewport
});

【讨论】:

    【解决方案2】:

    这是给你的伪代码:

    //on window.scroll 
        //for every still not animated element in the page
            //check if it's top is in the view
                //if it is, start the transition.
    

    关键是:

    https://stackoverflow.com/a/125106/1262700

    【讨论】:

      【解决方案3】:

      我想也许有一个名为 waypoints.js 的 jquery 插件可以帮助实现这个效果。

      你可以看一下这个演示:http://www.mightymatcha.com/

      【讨论】:

        【解决方案4】:

        我知道这是个老话题,但对于未来的用户来说,这里有一个简短的 sn-p 来完成这项工作。

        var $animation_elements = $('.animation-element');
        var $window = $(window);
        
        function check_if_in_view() {
          var window_height = $window.height();
          var window_top_position = $window.scrollTop();
          var window_bottom_position = (window_top_position + window_height);
        
          $.each($animation_elements, function() {
            var $element = $(this);
            var element_height = $element.outerHeight();
            var element_top_position = $element.offset().top;
            var element_bottom_position = (element_top_position + element_height);
        
            //check to see if this current container is within viewport
            if ((element_bottom_position >= window_top_position) &&
                (element_top_position <= window_bottom_position)) {
              $element.addClass('in-view');
            } else {
              $element.removeClass('in-view');
            }
          });
        }
        
        $window.on('scroll resize', check_if_in_view);
        $window.trigger('scroll');
        /*These styles contain basic styles for fomatting along with our animation css*/
        
        body {
          font-size: 16px;
          font-family: 'Open Sans', sans-serif;
          font-weight: 400;
          background: #efefef;
          line-height: 170%;
        }
        
        strong,
        b {
          font-weight: 600
        }
        
        h1,
        h2,
        h3,
        h4,
        h5,
        h6 {
          font-weight: 300;
          line-height: 150%;
        }
        
        i.fa {
          color: #333;
        }
        
        *,
        *:before,
        *:after {
          box-sizing: border-box;
          -moz-box-sizing: border-box;
          -webkit-box-sizing: border-box;
        }
        /*clearfixes*/
        
        .cf:before,
        .cf:after {
          content: " ";
          display: table;
        }
        
        .cf:after {
          clear: both;
        }
        
        .main-container {
          background: #fff;
          max-width: 1000px;
          margin: 25px auto 25px auto;
          position: relative;
        }
        
        .container {
          position: relative;
          padding: 25px;
        }
        /*animation element*/
        
        .animation-element {
          opacity: 0;
          position: relative;
        }
        /*animation element sliding left*/
        
        .animation-element.slide-left {
          opacity: 0;
          -moz-transition: all 500ms linear;
          -webkit-transition: all 500ms linear;
          -o-transition: all 500ms linear;
          transition: all 500ms linear;
          -moz-transform: translate3d(-100px, 0px, 0px);
          -webkit-transform: translate3d(-100px, 0px, 0px);
          -o-transform: translate(-100px, 0px);
          -ms-transform: translate(-100px, 0px);
          transform: translate3d(-100px, 0px, 0px);
        }
        
        .animation-element.slide-left.in-view {
          opacity: 1;
          -moz-transform: translate3d(0px, 0px, 0px);
          -webkit-transform: translate3d(0px, 0px, 0px);
          -o-transform: translate(0px, 0px);
          -ms-transform: translate(0px, 0px);
          transform: translate3d(0px, 0px, 0px);
        }
        /*animation slide left styled for testimonials*/
        
        .animation-element.slide-left.testimonial {
          float: left;
          width: 47%;
          margin: 0% 1.5% 3% 1.5%;
          background: #F5F5F5;
          padding: 15px;
          box-shadow: 0px 1px 1px 0px rgba(0, 0, 0, 0.2);
          border: solid 1px #EAEAEA;
        }
        .animation-element.slide-left.testimonial:hover,
        .animation-element.slide-left.testimonial:active{
          box-shadow: 0px 2px 8px 0px rgba(0, 0, 0, 0.25);
        }
        
        .animation-element.slide-left.testimonial:nth-of-type(odd) {
          width: 48.5%;
          margin: 0% 1.5% 3.0% 0%;
        }
        
        .animation-element.slide-left.testimonial:nth-of-type(even) {
          width: 48.5%;
          margin: 0% 0% 3.0% 1.5%;
        }
        
        .animation-element.slide-left.testimonial .header{
          float: left;
          width: 100%;
          margin-bottom: 10px;
        }
        .animation-element.slide-left.testimonial .left{
          float: left;
          margin-right: 15px;
        }
        .animation-element.slide-left.testimonial .right{
          float: left;
        }
        
        .animation-element.slide-left.testimonial img {
          width: 65px;
          height: 65px;
          border-radius: 50%;
          box-shadow: 0px 1px 3px rgba(51, 51, 51, 0.5);
        }
        
        .animation-element.slide-left.testimonial h3 {
          margin: 0px 0px 5px 0px;
        }
        
        .animation-element.slide-left.testimonial h4 {
          margin: 0px 0px 5px 0px;
        }
        
        .animation-element.slide-left.testimonial .content {
          float: left;
          width:100%;
          margin-bottom: 10px;
        }
        
        .animation-element.slide-left.testimonial .rating{}
        
        .animation-element.slide-left.testimonial i {
          color: #aaa;
          margin-right: 5px;
        }
        
        
        
        /*media queries for small devices*/
        @media screen and (max-width: 678px){
          /*testimonials*/
          .animation-element.slide-left.testimonial,
          .animation-element.slide-left.testimonial:nth-of-type(odd),
          .animation-element.slide-left.testimonial:nth-of-type(even){
            width: 100%;
            margin: 0px 0px 20px 0px;
          }
          .animation-element.slide-left.testimonial .right,
          .animation-element.slide-left.testimonial .left,
          .animation-element.slide-left.testimonial .content,
          .animation-element.slide-left.testimonial .rating{
            text-align: center;
            float: none;
          }
          .animation-element.slide-left.testimonial img{
            width: 85px;
            height: 85px;
            margin-bottom: 5px;
          }
        
        }
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
        <!--For our animations to look good, the animated elements need to be able to be scrolled to. For this example I've added dummy content to the top -->
        <div class="main-container">
          <div class="container">
            <h1>Slide in from the left </h1>
            <p>This animation will focus on sliding an element from the left once it enters the view of the user</p>
          </div>
          <div class="container">
            <h2>
              Our Testimonials <i class="fa fa-comment"></i></h2>
            <p> We have worked in the industry for 15 years and have provided services to a wide range of clients.</p>
            <p>Come and see what our clients are saying about our services. </p>
          </div>
          <div class="container cf">
            <!-- testimonial one -->
            <div class="animation-element slide-left testimonial">
              <div class="header">
                <div class="left">
                  <img src="http://drive.google.com/uc?export=download&id=0B7UPM0QugWUjVTdZcktRTWhNamM" />
                </div>
                <div class="right">
                  <h3>Johnathon Richard Smith</h3>
                  <h4>CEO / Manager - Auto Incorporated</h4>
                </div>
              </div>
              <div class="content"><i class="fa fa-quote-left"></i> When I started using their service I was skeptical. They promised me a 300% return on my initial investment. However they came through on their word and now my business is flourishing.. <i class="fa fa-quote-right"></i>
              </div>
              <div class="rating">
                <i class="fa fa-star"></i>
                <i class="fa fa-star"></i>
                <i class="fa fa-star"></i>
                <i class="fa fa-star"></i>
                <i class="fa fa-star-half-o"></i>
              </div>
            </div>
            <!--testimonial two -->
            <div class="animation-element slide-left testimonial">
              <div class="header">
                <div class="left">
                  <img src="http://drive.google.com/uc?export=download&id=0B7UPM0QugWUjV3BseTMtcEU1T2M" />
                </div>
                <div class="right">
                  <h3>Joanna Hammerlton</h3>
                  <h4>Marketing Manager - Omega Creative</h4>
                </div>
              </div>
              <div class="content"><i class="fa fa-quote-left"></i> Our company first enlisted their services when we had a down-turn in sales and revene. They outlined a series of steps we could take to improve our position and within a year we are making signifcant improvements..
                <i class="fa fa-quote-right"></i>
              </div>
              <div class="rating">
                <i class="fa fa-star"></i>
                <i class="fa fa-star"></i>
                <i class="fa fa-star"></i>
                <i class="fa fa-star"></i>
                <i class="fa fa-star-o"></i>
              </div>
            </div>
            <!--testimonial three -->
            <div class="animation-element slide-left testimonial">
              <div class="header">
                <div class="left">
                  <img src="http://drive.google.com/uc?export=download&id=0B7UPM0QugWUjTURta0pyMEtoUmc
                            " />
                </div>
                <div class="right">
                  <h3>Mark Jamerson</h3>
                  <h4>CEO - Generic Business</h4>
                </div>
              </div>
              <div class="content"><i class="fa fa-quote-left"></i> We entered into a 12 month period of service with this company in the hopes to improve our returns. After this period we have a return of double our initial investment..
                <i class="fa fa-quote-right"></i>
              </div>
              <div class="rating">
                <i class="fa fa-star"></i>
                <i class="fa fa-star"></i>
                <i class="fa fa-star"></i>
                <i class="fa fa-star"></i>
                <i class="fa fa-star"></i>
              </div>
            </div>
            <!--testimonial four -->
            <div class="animation-element slide-left testimonial">
              <div class="header">
                <div class="left">
                  <img src="http://drive.google.com/uc?export=download&id=0B7UPM0QugWUjb1dxcGZEYUc0Z3M" />
                </div>
                <div class="right">
                  <h3>Susan Hilton</h3>
                  <h4>Financial Officer - People Tech</h4>
                </div>
              </div>
              <div class="content"><i class="fa fa-quote-left"></i> Our involvement in this company has been mutually beneficial. We were hoping for slightly higher returns, however the current level of returns are sufficient..
                <i class="fa fa-quote-right"></i>
              </div>
              <div class="rating">
                <i class="fa fa-star"></i>
                <i class="fa fa-star"></i>
                <i class="fa fa-star"></i>
                <i class="fa fa-star-o"></i>
                <i class="fa fa-star-o"></i>
              </div>
            </div>
          </div>

        来源:http://www.sitepoint.com/scroll-based-animations-jquery-css3/

        【讨论】:

          猜你喜欢
          • 2015-09-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-03-11
          • 1970-01-01
          • 2013-12-14
          相关资源
          最近更新 更多