2012-07-12 42 views
5

我是新来的HTML5,CSS和JavaScript,而且大多数时候我一直在玩。 我想要做的是设置和触发div的转换。加载页面后,我设法通过设置转换来完成此操作。但是,这并不是很有活力,并且看起来并不正确。我感谢所有帮助如何设置和触发来自javascript的css转换

<!DOCTYPE html> 
<html> 
<head> 
    <style> 
     body{ 
      text-align: center; 
     } 

     #dialPointer 
     { 
      position:relative; 
      margin-left: auto; 
      margin-right: auto; 
      width:23px; 
      height:281px; 
      background:url(pointer.png); 
      background-size:100% 100%; 
      background-repeat:no-repeat; 

      transform: rotate(-150deg); 
      transition-duration: 2s; 
      transition-delay: 2s; 

      -webkit-transform: rotate(-150deg); 
      -webkit-transition-duration:2s; 
      -webkit-transition-delay: 2s; 
     } 


     /* I want to call this once */ 
     .didLoad 
     { 
      width:23px; 
      height:281px; 
      transform:rotate(110deg); 
      -moz-transform:rotate(110deg); /* Firefox 4 */ 
      -webkit-transform:rotate(110deg); /* Safari and Chrome */ 
      -o-transform:rotate(110deg); /* Opera */ 
     } 

     </style> 
</head> 

<body> 
    <div id="dialPointer"></div> 
    <script language="javascript" type="text/javascript"> 
     window.onload=function() { 
      //But instead of using rotate(110deg), I would like to call "didLoad" 

      document.getElementById("dialPointer").style.webkitTransform = "rotate(110deg)"; 


     }; 
     </script> 
</body> 
</html> 
+0

什么是你想与你想调用一次类didLoad在说什么?你想实施它还是改造它?在JavaScript中你不能“调用”一个HTML类...? – gabeio 2012-07-12 11:40:47

+0

Okey,所以想要我想做的是让我的div与背景img,加载页面后旋转。但是我不得不在体内宣布过渡,这似乎很奇怪。所以我想触发一个已经宣布过渡我的div。另外,我在Safari浏览器上。 – user1520481 2012-07-12 12:24:53

回答

0

也许是这样的:

document.getElementById("dialPointer").className += "didLoad"; 
+0

感谢您的回应!尽管当我用你的代码替换我的一行代码时没有任何反应。有任何想法吗?我在Safari浏览器上浏览 – user1520481 2012-07-12 12:16:31

+0

检查调试控制台是否有错误。你是否在onLoad函数中添加了该行? – 2012-07-12 12:37:37

+0

没有错误,我使用safari的网络检查器和错误控制台。是的,我只替换了document.getElementById(“dialPointer”)。style.webkitTransform =“rotate(110deg)”; with document.getElementById(“dialPointer”)。className + =“didLoad”; – user1520481 2012-07-12 12:46:02

4

可以,只要你想你的类添加到元素使用下面的JavaScript:

document.getElementById("dialPointer").className += " didLoad"; 

或者可以说更好,如果你想保证跨浏览器的支持,使用这样的jQuery:

$(function() { 
// Handler for .ready() called. 
$('#dialPointer').addClass('didLoad'); 
}); 

编辑:

fiddle在这里,我在Chrome和Safari浏览器已经测试在Windows上。我必须将dialPointer风格中的转换代码注释掉,并将其移至didLoad类。我也用填充替换了你的背景图像,让它在小提琴中工作。

+0

添加类时,您需要在字符串的起始处有一个空格,否则,如果已经有另一个类,则该字符串将不起作用。 – 2012-07-12 11:27:18

+0

糟糕。感谢您指出了这一点。 – 2012-07-12 11:27:49

+0

Ahha!太好了!那么它是否可以,它不能过渡,如果div已经旋转? – user1520481 2012-07-12 13:24:17

2

触发转换的方式是使元素与CSS选择器匹配。最简单的方法是将转换分配给一个类,然后使用Javascript添加该类。所以在你的例子中:

document.getElementById('dialPointer').classList.add('didLoad'); 

和你选择的元素会动画。 (我已经使用Javascript标准来赞扬Javascript,但它在旧版浏览器中无法使用,所以我会留给你来让它工作)。

得到它的动画在页面加载,把它放在一个负载事件:

window.addEventListener('load', function() { 
    document.getElementById('dialPointer').classList.add('didLoad'); 
}); 
+0

感谢您的回应,我试着替换document.getElementById(“dialPointer”)。style.webkitTransform =“rotate(110deg)”;与document.getElementById('dialPointer')。classList一起使用 。加( 'didLoad');但然后没有任何反应,可能是因为我使用Safari浏览器? – user1520481 2012-07-12 12:12:53

+0

我以为我已经分配了向类didLoad的转换。否则,请你告诉我该怎么做? – user1520481 2012-07-12 12:37:28