阻止代码的JavaScript行为

function simulateComplexOperation(sleepDuration) {
  var Now = new Date().getTime();
  while (new Date().getTime() < Now + sleepDuration) { /* do nothing */ }
}

function testFunction() {
  document.getElementById('panel1').style.display = 'none';
  console.log('before');
  simulateComplexOperation(2000);
  console.log('after');
}
<div id='panel1'>
  text to hidden
</div>

<button onclick="testFunction()">Hide</button>

(jsFiddle)

这是时间表:

>打印“之前”
>等2秒
>打印“之后”
>隐藏id为’panel1’的元素

为什么不是:

>隐藏id为’panel1’的元素
>打印“之前”
>等2秒
>打印“之后”

有没有办法强制样式更改操作成为第一个

解决方法

您最好使用setTimeout.但这是由浏览器调度代码引起的.

function simulateComplexOperation(sleepDuration) {
  var Now = new Date().getTime();
  while (new Date().getTime() < Now + sleepDuration) { /* do nothing */ }
}

function testFunction() {
  document.getElementById('panel1').style.display = 'none';
  console.log('before');
  setTimeout(() => {
    console.log('after');
  },2000);
}
<div id='panel1'>
  text to hidden
</div>

<button onclick="testFunction()">Hide</button>

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...