Javascript 如何仅在执行第一个方法后执行第二个方法
我只想在加载段落标记后打印标题标记。下面是我的Javascript代码。有关更多说明,请参见plunker:Javascript 如何仅在执行第一个方法后执行第二个方法,javascript,jquery,css,html,Javascript,Jquery,Css,Html,我只想在加载段落标记后打印标题标记。下面是我的Javascript代码。有关更多说明,请参见plunker: 功能更改文本(cont1、cont2、速度){ var Otext=cont1.text(); var Ocontent=Otext.split(“”); var i=0; 函数show(){ 如果(i
功能更改文本(cont1、cont2、速度){
var Otext=cont1.text();
var Ocontent=Otext.split(“”);
var i=0;
函数show(){
如果(i
我会这样做(请注意,Internet Explorer不支持ES6承诺,但也可以在旧浏览器中使用承诺)
您必须填写注释部分才能使其正常工作:
var Otimer;
/*@TODO: refactor show() function to use ES6 Promises (eventually with shims) */
function show(Ocontent) {
var i = 0;
if (i < Ocontent.length) {
cont2.append(Ocontent[i]);
i = i + 1;
};
if (Otimer === undefined) {
Otimer = setInterval(show, speed); // Remember to fulfill the promise and remove the interval once it's finished
}
// return the promise
};
function changeText(p1, p2, speed) {
var Otext = p1.text();
var Ocontent = Otext.split("");
return show(Ocontent);
};
$(function () {
changeText($("p"), $(".p2"), 30).then(function() { // We call changeText the second time after the promise return by changeText() is fulfilled and the show() function has finished
Otimer = undefined;
changeText($("h2"), $(".h2"), 30);
});
});
var-Otimer;
/*@TODO:重构show()函数以使用ES6承诺(最终使用垫片)*/
功能展示(Ocontent){
var i=0;
如果(i
首先,声明函数内部的变量是作用域变量,不能从函数外部访问。
因此,行clearInterval(Otimer)代码>永远不起作用
下面的代码修复了范围问题,并使用回调实现了您想要的功能
function changeText(cont1, cont2, speed, cb) {
var Otext = cont1.text();
var Ocontent = Otext.split("");
var i = 0;
function show() {
if (i < Ocontent.length) {
cont2.append(Ocontent[i]);
i++;
}else{
clearInterval(Otimer)
if(cb) cb()
}
};
var Otimer = setInterval(show, speed);
};
$(document).ready(function() {
changeText($("p"), $(".p2"), 30, function(){
changeText($("h2"), $(".h2"), 30);
});
});
功能更改文本(cont1、cont2、速度、cb){
var Otext=cont1.text();
var Ocontent=Otext.split(“”);
var i=0;
函数show(){
如果(i
仅供参考,不需要两个文档。就绪的处理程序-将两个代码块合并为一个。@chetan:打开web控制台,它会为您提供重要信息。@chetan,您可以为此尝试calback函数。另外,如果只使用了一次Otimer
,则可以使用setTimeout
。
function changeText(cont1, cont2, speed, cb) {
var Otext = cont1.text();
var Ocontent = Otext.split("");
var i = 0;
function show() {
if (i < Ocontent.length) {
cont2.append(Ocontent[i]);
i++;
}else{
clearInterval(Otimer)
if(cb) cb()
}
};
var Otimer = setInterval(show, speed);
};
$(document).ready(function() {
changeText($("p"), $(".p2"), 30, function(){
changeText($("h2"), $(".h2"), 30);
});
});