如何使页面加载微调器顺利旋转?

时间:2014-01-17 10:44:41

标签: javascript jquery performance spinner

我已经尝试了两个css动画微调器和javascript动画微调旋转,直到$(window).load()触发。但是,由于我的document.ready函数中的密集js,动画不断被中断。我目前的实施如下:

<div id="spinner"></div>
<script>
  $("#spinner").css("top",$(window).height()/2-50);
  $("#spinner").css("left",$(window).width()/2-50);
  var opts = {
  lines: 13, // The number of lines to draw
  length: 20, // The length of each line
  width: 10, // The line thickness
  radius: 30, // The radius of the inner circle
  corners: 1, // Corner roundness (0..1)
  rotate: 0, // The rotation offset
  direction: 1, // 1: clockwise, -1: counterclockwise
  color: '#000', // #rgb or #rrggbb or array of colors
  speed: 1, // Rounds per second
  trail: 60, // Afterglow percentage
  shadow: false, // Whether to render a shadow
  hwaccel: false, // Whether to use hardware acceleration
  className: 'spinner', // The CSS class to assign to the spinner
  zIndex: 2e9, // The z-index (defaults to 2000000000)
  top: 'auto', // Top position relative to parent in px
  left: 'auto' // Left position relative to parent in px
   };
  $("#spinner").css("display","inline-block");
  target = document.getElementById('spinner');
  spinner = new Spinner(opts).spin(target);
</script>

如果使用css动画微调器,我会遇到类似的问题。我也尝试了一个动画gif图像同样的效果。最后,据我所知,使用webworker无济于事,因为无法从webworker访问主线程的DOM。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

你是正确的,无法从网络工作者那里访问DOM。 ITSELF密集型任务是否有必要访问DOM?

问题是您的密集型任务正在同步运行,阻止UI线程更新。除了网络工作者之外,唯一的解决方案是分批运行您的密集型任务,并在批次之间留出一些时间。我建议在允许DOM更新之前运行任务不超过50毫秒,这可以很简单地完成:

function runTask() {
    // run for 50 ms
    setTimeout(runTask, 1); // Allow DOM-update
}

它可能仍然无法顺利运行,在这种情况下,您必须不断减少任务在两次DOM更新之间运行的ms量。不理想,但不幸的是你必须通过一个线程来实现:(