javascript - setInterval 和 setTimeout 无法正常工作

标签 javascript jquery raphael

这使用 Raphaeljs 从数组中绘制单个和弦:

function createChordStruct(key, string, shape) {
  var string = string.toUpperCase();
  var position = positions[string][key];
  var struct = chord_shapes[shape];

return {
  name: key + struct.name,
  chord: struct.chord,
  position: position,
  position_text: struct.position_text,
  bars: struct.bars
  }
}

function createChordElement(chord_struct) {
  var chordbox = $('<div>').addClass('chord');
  var chordcanvas = $('<div>');
  var chordname = $('<div>').addClass('chordname');

chordbox.append(chordcanvas);
chordbox.append(chordname);
chordname.append(chord_struct.name);


var paper = Raphael(chordcanvas[0], 150, 140);
var chord = new ChordBox(paper, 30, 30);

chord.setChord(
  chord_struct.chord,
  chord_struct.position,
  chord_struct.bars,
  chord_struct.position_text);
chord.draw();

return chordbox;


}

function createSectionElement(section_struct) {
  var section = $('<div>').addClass('section');
  var section_title = $('<div>').addClass('title');
  var section_desc = $('<div>').addClass('description');

  section.append(section_title); 
  section.append(section_desc);
  section_title.append(section_struct.section);
  section_desc.append(section_struct.description);

  return section;

} 

这将从数组中创建的每个和弦放入一个名为“chordscroller”的新 div 中:

function c_i() {


var randomholder = 'id_' + (Math.floor(Math.random() * 100005) + 1);
var randomId = 'id_' + (Math.floor(Math.random() * 100005) + 1);
$(function () {
  $('#sortable').append($('<li id ="' + randomholder + '" class="chordbox"><span id="i"       class="scale">C - I</span><span id="' + randomId + '" class=" even scrollpane chordscroller"></span></li>').sortable( "refresh" ))
  });


function c_one() {
  var container = $("#" + randomId + "");
  var column = null;
  var column = _.shuffle(c_1);


for (var i = 0; i < column.length; ++i) {
  var section_struct = column[i];
  var section = createSectionElement(section_struct);

  for (var j = 0; j < section_struct.chords.length; ++j)  {
    section.append(createChordElement(section_struct.chords[j]));

  }

container.append(section);
}


}



$(function() { c_one() });


}

问题是它同时绘制所有和弦并且需要很长时间。我已经尝试了我能想到的 setTimeout 和 setInterval 的所有组合,但我不断遇到错误。

任何人都可以从这段代码中看出如何一次绘制一个和弦而不是一次绘制所有和弦吗?

最佳答案

终于弄清楚了(使用一个名为 doTimeout 的插件):

$.doTimeout( 1, function() {
  chord.setChord(
  chord_struct.chord,
  chord_struct.position,
  chord_struct.bars,
  chord_struct.position_text);
  chord.draw();


});

关于javascript - setInterval 和 setTimeout 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12291857/

相关文章:

javascript 使用 Firefox/chrome 进行 WMI 查询?

javascript - Chrome、Safari 和 Firefox 上的 CORS POST 请求失败

javascript - 如果选中复选框,则函数更新字符串或值

javascript - 如何缩小莫里斯条形图之间的差距

javascript - Raphael 示例修改 - 分析的新基线

javascript - 选择第二个字

javascript - jQuery 仅适用于 firefox 或 safari/chrome 控制台

javascript - Jquery 将 Div 移动到屏幕中心(Masonry JS)

javascript - JQuery 选择下拉列表中最接近的 tr 选择

jquery - 在 IE9 和 Opera 中显示标题