使setInterval和setTimeout工作时出现问题
Trouble getting setInterval and setTimeout to work
这使用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();
});
相关文章:
- 使setInterval和setTimeout工作时出现问题
- Javascript函数不工作.脚本定位问题
- 火狐中的多个问题,但在 chrome 中工作正常,没有一个问题
- 让关闭工作的问题
- iPad中的Jquery滑块问题,在台式机和笔记本电脑中工作正常
- JAVASCRIPT:Toggle中的Toggle不工作问题
- Chrome's表格布局:修复了更改表格宽度后无法正常工作的问题
- 我的ajax加载栏出了什么问题?为什么它不能正常工作
- 解决小问题(工作不顺利)
- 我正试图获得一个带有复选框的多选下拉列表,在填充项目和获得所有选中的工作时遇到了一些问题
- 在 XSLT 工作表中的 JavaScript 中插入属性的问题
- IE浏览器的Javascript问题,在谷歌浏览器中工作正常,但在IE中则不行
- 在使 dojo 1.7.2 工作时遇到问题
- nivo滑块和光滑的轮播无法协同工作的问题 - jquery
- 使显示隐藏功能正常工作的问题
- iScroll4 和流播放器在安卓设备中工作的问题
- 捏缩放问题 语音间隙构建停止工作
- 关于“AngularJS与Plupload一起工作”的一些问题
- 让地图在谷歌地图 API v3 上工作的问题
- Javascript问题:工作在FF,但不是在Chrome和Safari