【问题标题】:jQuery rotate/transformjQuery旋转/变换
【发布时间】:2011-12-17 16:40:27
【问题描述】:

我想使用此功能旋转然后在特定点或角度停止。现在元素只是不停地旋转。代码如下:

    <script type="text/javascript">
    $(function() {
       var $elie = $("#bkgimg");
       rotate(0);
       function rotate(degree) {

           // For webkit browsers: e.g. Chrome
           $elie.css({ WebkitTransform: 'rotate(' + degree + 'deg)'});
           // For Mozilla browser: e.g. Firefox
           $elie.css({ '-moz-transform': 'rotate(' + degree + 'deg)'});

           // Animate rotation with a recursive call
           setTimeout(function() { rotate(++degree); },65);
       }
    });
    </script>

感谢您的帮助

【问题讨论】:

    标签: jquery transform rotation


    【解决方案1】:

    我想出了一些解决问题的办法。它涉及jquery和css。这类似于切换,但不是切换元素的显示,它只是在交替单击时更改其属性。单击 div 时,它会将带有标签的元素旋转 180 度,当您再次单击它时,带有标签的元素会返回到其原始位置。如果您想更改动画持续时间,只需更改 transition-duration 属性即可。

    CSS

    #example1{
    transition-duration:1s;
    }
    

    jQuery

    $(document).ready( function ()  {  var toggle = 1;
      $('div').click( function () {
          toggle++;
          if ( (toggle%2)==0){
              $('#example1').css( {'transform': 'rotate(180deg)'});
          }
          else{
              $('#example1').css({'transform': 'rotate(0deg)'});
          }
      });
    

    });

    【讨论】:

      【解决方案2】:

      只需删除一次将其旋转一度并永久调用脚本的行。

      // Animate rotation with a recursive call
      setTimeout(function() { rotate(++degree); },65);
      

      然后将所需的值传递给函数...在此示例中为 45 为 45 度。

      $(function() {
      
          var $elie = $("#bkgimg");
          rotate(45);
      
              function rotate(degree) {
            // For webkit browsers: e.g. Chrome
                 $elie.css({ WebkitTransform: 'rotate(' + degree + 'deg)'});
            // For Mozilla browser: e.g. Firefox
                 $elie.css({ '-moz-transform': 'rotate(' + degree + 'deg)'});
              }
      
      });
      

      .css() 更改为.animate() 以便animate the rotation with jQuery。我们还需要为动画添加一个持续时间,5000 5 秒。并更新您的原始功能以消除一些冗余并支持更多浏览器...

      $(function() {
      
          var $elie = $("#bkgimg");
          rotate(45);
      
              function rotate(degree) {
                  $elie.animate({
                              '-webkit-transform': 'rotate(' + degree + 'deg)',
                              '-moz-transform': 'rotate(' + degree + 'deg)',
                              '-ms-transform': 'rotate(' + degree + 'deg)',
                              '-o-transform': 'rotate(' + degree + 'deg)',
                              'transform': 'rotate(' + degree + 'deg)',
                              'zoom': 1
                  }, 5000);
              }
      });
      

      编辑: 上面的标准 jQuery CSS 动画代码不起作用,因为显然 jQuery .animate() 还不支持 CSS3 transforms

      这个 jQuery 插件应该为旋转设置动画:

      http://plugins.jquery.com/project/QTransform

      【讨论】:

      • 这只是旋转图像。我真的希望它动画/旋转并停止在某个点或度数。对不起,我应该在之前提到过。谢谢。
      • @Andrea,我正在 Safari 中查看您的页面,图像旋转了 45 度。查看控制台中的 DOM,它显示 -webkit-transform 的正确 CSS 已被应用。也许您的浏览器不支持 CSS 3。
      • @Andrea,对不起,我忘了提到动画所需的“持续时间”。我又编辑了。
      • @Andrea, jQuery animate() 不支持transforms 我刚学的。这是一个应该做的插件。 plugins.jquery.com/project/QTransform
      • 我明白了。我将不得不在文档上工作一点。谢谢你的帮助。我尝试了其他一些插件,但无法让它们运行。也许就是这个!
      【解决方案3】:

      这是因为您在旋转内部有一个递归函数。它再次调用自己:

      // Animate rotation with a recursive call
      setTimeout(function() { rotate(++degree); },65);
      

      去掉它,它就不会继续递归运行了。

      我也建议只使用这个函数:

      function rotate($el, degrees) {
          $el.css({
        '-webkit-transform' : 'rotate('+degrees+'deg)',
           '-moz-transform' : 'rotate('+degrees+'deg)',  
            '-ms-transform' : 'rotate('+degrees+'deg)',  
             '-o-transform' : 'rotate('+degrees+'deg)',  
                'transform' : 'rotate('+degrees+'deg)',  
                     'zoom' : 1
      
          });
      }
      

      它更简洁,适用于大多数浏览器。

      【讨论】:

        【解决方案4】:
        t = setTimeout(function() { rotate(++degree); },65);
        

        clearTimeout 停止

        clearTimeout(t);
        

        我将它与 AJAX 一起使用

        success:function(){ clearTimeout(t); }
        

        【讨论】:

          【解决方案5】:

          为什么不直接使用,toggleClass on click?

          js:

          $(this).toggleClass("up");
          

          css:

          button.up {
              -webkit-transform: rotate(180deg);
                 -moz-transform: rotate(180deg);
                  -ms-transform: rotate(180deg);
                   -o-transform: rotate(180deg);
                      transform: rotate(180deg);
                         /* IE6–IE9 */
                         filter: progid:DXImageTransform.Microsoft.Matrix(M11=0.9914448613738104, M12=-0.13052619222005157,M21=0.13052619222005157, M22=0.9914448613738104, sizingMethod='auto expand');
                           zoom: 1;
              }
          

          您也可以将其添加到 css 中:

          button{
                  -webkit-transition: all 500ms ease-in-out;
                  -moz-transition: all 500ms ease-in-out;
                  -o-transition: all 500ms ease-in-out;
                  -ms-transition: all 500ms ease-in-out;
          }
          

          这将添加动画。

          PS...

          回答你原来的问题:

          你说它会旋转但不会停止。使用 set timeout 时,您需要确保有一个不会调用 settimeout 的条件,否则它将永远运行。所以对于你的代码:

          <script type="text/javascript">
              $(function() {
               var $elie = $("#bkgimg");
               rotate(0);
               function rotate(degree) {
          
                // For webkit browsers: e.g. Chrome
              $elie.css({ WebkitTransform: 'rotate(' + degree + 'deg)'});
                // For Mozilla browser: e.g. Firefox
              $elie.css({ '-moz-transform': 'rotate(' + degree + 'deg)'});
          
          
              /* add a condition here for the extremity */ 
              if(degree < 180){
                // Animate rotation with a recursive call
                setTimeout(function() { rotate(++degree); },65);
               }
              }
              });
              </script>
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2015-06-23
            • 2022-01-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-11-02
            • 1970-01-01
            相关资源
            最近更新 更多