使用CSS转换滚动时如何旋转图像?

时间:2013-08-30 19:48:16

标签: jquery css3

我不确定如何使用jQuery,但有一个CSS3属性:transform:rotate

它可以和jQuery一起使用吗?

transform:rotate;
-ms-transform:rotate;
-webkit-transform:rotate;

JSFIDDLE

5 个答案:

答案 0 :(得分:12)

试试这个小提琴:

http://jsfiddle.net/kDSqB/

完全旋转并不是100%准确,但我认为那晚是小提琴的环境。

这里的代码:

var $cog = $('#cog'),
$body = $(document.body),
bodyHeight = $body.height();

$(window).scroll(function () {
    $cog.css({
        'transform': 'rotate(' + ($body.scrollTop() / bodyHeight * 360) + 'deg)'
    });
});

答案 1 :(得分:7)

这是一个简单的jQuery示例,请检查修改后的JSFiddle:

http://jsfiddle.net/g3k6h/5/

CSS将处理轮换> 360和<对我来说0,所以我甚至不打扰这样做,并根据滚动的距离调整旋转值。我不担心试图考虑完整的旋转,以便它更好地流动速度和距离滚动。这个解决方案依赖于jQuery,但没有它就可以轻松完成。

$(function() {
  var rotation = 0, 
    scrollLoc = $(document).scrollTop();
  $(window).scroll(function() {
    var newLoc = $(document).scrollTop();
    var diff = scrollLoc - newLoc;
    rotation += diff, scrollLoc = newLoc;
    var rotationStr = "rotate(" + rotation + "deg)";
    $(".gear").css({
      "-webkit-transform": rotationStr,
      "-moz-transform": rotationStr,
      "transform": rotationStr
    });
  });
})

答案 2 :(得分:1)

我从OneOfOne的解决方案入手,并添加了动画。在scroll事件上启动动画,以mouseup结束。 http://jsfiddle.net/g3k6h/4/

var rotation = 0;
var interval;
var gear = $('.gear');

function animate() {
    gear.css('transform', 'rotate('+rotation+'deg)');
    rotation += 10;
    rotation %= 360;
}
function startAnim() {
    if (!interval) {
        interval = setInterval(animate, 100);
    }         
}    
function stopAnim() {
    clearInterval(interval);
    interval = null;
}    
$(document).scroll(startAnim).mouseup(stopAnim);
jamesgauld的答案与我的相似,只是旋转量基于滚动位置,我在滚动时只是保持旋转,这就是我理解这个问题的方法。

答案 3 :(得分:0)

您可以使用DOM javascript(而不是jQuery)以更简单的方式获得相同的结果。给您的图片一个ID,并添加以下javascript:

<script>
window.onscroll = function() {scrollRotate()};<br/>
<br/>
function scrollRotate() {<br/>
  var navimg = document.getElementById("navimg");<br/>
  navimg.style.transform = "rotate("+ (window.pageYOffset/5) + "deg)"<br/>
}
</script>

在显示“ window.pageYOffset / 5”的位置,您可以降低数字(5)以获得更快的旋转速度,也可以提高数字以提高旋转速度。

答案 4 :(得分:-1)

像这样,jQuery应该使用正确的css3前缀。 http://jsfiddle.net/g3k6h/2/

$(function() {
    $('.gear').click(function() {
        $(this).css('transform', 'rotate(30deg)'); 
    });
});