【发布时间】:2018-02-11 21:39:52
【问题描述】:
我有一个脚本(在下面的示例中进行了简化),其中用户操作会启动递归函数。
用户可以在已经启动的操作尚未完成运行时启动新操作。
但我想确保任何新操作停止所有之前的操作。
目前实际发生的情况(您可以在下面的示例中看到这一点)是,无论用户启动了多少新操作,之前启动的每个操作都会继续执行,直到完成。
我想知道(在下面的示例中)是否可以在前一个列表仅增长到 5 个项目时开始增长一个新列表,并确保前一个列表不再增长。
var trigger = document.getElementsByTagName('p')[0];
var o = 0;
function addListItems(orderedList, listItemNumber) {
var listItems = orderedList.getElementsByTagName('li');
if (listItemNumber > 9) {
return;
}
listItems[listItemNumber].classList.add('show');
listItemNumber++;
setTimeout(function(){addListItems(orderedList, listItemNumber)}, 400);
}
function startRecursiveFunction() {
var orderedList = document.getElementsByTagName('ol')[o];
var listItemNumber = 0;
if (o < 7) {
addListItems(orderedList, listItemNumber);
}
o++;
}
trigger.addEventListener('click', startRecursiveFunction, false);
p {
font-weight: bold;
cursor: pointer;
}
ol {
display: inline-block;
}
li {
opacity: 0;
}
li.show {
opacity: 1;
}
<p>Click to trigger function (up to 7 times)</p>
<ol>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
<li>7</li>
<li>8</li>
<li>9</li>
<li>10</li>
</ol>
<ol>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
<li>7</li>
<li>8</li>
<li>9</li>
<li>10</li>
</ol>
<ol>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
<li>7</li>
<li>8</li>
<li>9</li>
<li>10</li>
</ol>
<ol>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
<li>7</li>
<li>8</li>
<li>9</li>
<li>10</li>
</ol>
<ol>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
<li>7</li>
<li>8</li>
<li>9</li>
<li>10</li>
</ol>
<ol>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
<li>7</li>
<li>8</li>
<li>9</li>
<li>10</li>
</ol>
<ol>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
<li>7</li>
<li>8</li>
<li>9</li>
<li>10</li>
</ol>
【问题讨论】:
标签: javascript function exit