2016-06-09 46 views
0

我想运行一个for循环,但我不希望它一次全部执行。我需要暂停执行代码,直到用户点击2次网页

for(var i = 0; i < array1.length;i++){ 
    var tempArray[]; 
    var tempArrayRevised = []; 
confirm("Click the page twice!"); 
    //This is where I want the code to pause until the webpage has been clicked on twice 

    for(var i = 0; i < 2; i++){ 
     tempArrayRevised.push(tempArray[i+1]); 
    } 
    array2.push(tempArrayRevised); 
    //unhighlight position 
} 
+0

我想你应该提供更多的上下文。你为什么做这个?为什么不只是听取2个点击事件,然后在发生时进行循环播放? – Jbird

+0

如果目标是循环遍历2个部分的数组,然后使用Array.protototype.slice()创建两个数组。 – Jbird

回答

0
runned=false; 
window.addEventListener("dblclick", function(){ 
if(runned==true){ 
    for(var i = 0; i < 2; i++){ 
tempArrayRevised.push(tempArray[i+1]); } 
array2.push(tempArrayRevised);}} 

for(var i = 0; i < array1.length;i++){ 
var tempArray[]; 
var tempArrayRevised = []; 
confirm("Click the page twice!"); 
runned=true; 
} 

像这样的事情?

0

这将是这样的:

for (var i = 0; i < array1.length; i++) { 
    var tempArray[]; 
    var tempArrayRevised = []; 
    var pageClickCount = 0; 

    if (confirm("Click the page twice!")) { 
     document.body.addEventListener('click', function() { 
      pageClickCount += 1; 
      execRest(); 
     }); 
     document.body.addEventListener('dblclick', function() { 
      pageClickCount += 2; 
      execRest(); 
     }); 
    } 

    function execRest() { 
     if (pageClickCount >= 2) { 
      for (var i = 0; i < 2; i++) { 
       tempArrayRevised.push(tempArray[i + 1]); 
      } 
      array2.push(tempArrayRevised); 
      //unhighlight position 
     } 
    } 
} 
+0

您正在重新声明您的数组,每个循环单击count和execRest函数。就是不行。 – Jbird

+0

我需要它们每次循环时重置。我真的需要该程序弹出一个确认,要求他们点击两次,然后等待他们点击两次,然后其余部分通过 – Victoria

+0

循环即使您需要变量每次“重置”(在这种情况下,您可能不会根本不需要循环)你不会重新声明它们,就像在这个例子中看到的一样,你肯定不会在循环中重新声明一个函数。 – Jbird

0

我不是很确定你为什么这样做,但根据所提供的信息,这里是几行代码是:

  1. 开始遍历“thingArray”和增量“loopCount”变种
  2. 当“loopCount”等于2,我们跳出循环并绑定click事件
  3. 当点击事件已触发TWIC e,我们称之为“简历”功能,循环使用剩余的项目。

变量loopCount并不是必需的,但是我已经把它放在那里,以便您可以参考它来创建在此过程中发生的其他逻辑。你显然可以使用循环内的本地i var来进行简单的增量检查。

'break'语句是这里的关键组件,代码主要是为了证明这一点。

小提琴:https://jsfiddle.net/jbird/2zza826j/

在浏览器控制台,你会看到一条消息,每次点击的事件,最后,当循环中的“恢复”功能完成后,您会看到整数4这是长的阵列显然。

哦,我不会建议直接在窗口上绑定用户启动的事件。

var clickTarget = document.querySelectorAll('.click-target')[0], 
    loopCount = 0, 
    clickCount = 0, 
    thingArray = ['thing1', 'thing2', 'thing3', 'thing4'], 
    thingDoneArray = []; 

function start() { 
    for (var i = 0; i < thingArray.length; i++) { 
     loopCount += 1; 

     thingDoneArray.push(thingArray[i]) 

     if(loopCount == 2) { 
      // Bind your click event 
      clickTarget.addEventListener('click', onClick); 

      // Alert the user 
      alert('Click the page twice...for some reason.'); 

      // Break out of the loop (this is the important part) 
      break; 
     } 
    } 
} 

function resume() { 
    for(var i = 0; i < thingArray.length - thingDoneArray.length; i++) { 
     loopCount += 1; 
    } 

    console.log(loopCount); 
} 

function onClick(evt) { 
     evt.preventDefault(); 

    clickCount += 1; 

    console.log('1 click event happened.'); 

    if(clickCount == 2) { 
     clickTarget.removeEventListener('click', onClick); 
     resume(); 
    } 
} 

start();