javascriptwindow.open未遵循setInterval参数?

xoefb8l8  于 2023-03-06  发布在  Java
关注(0)|答案(3)|浏览(98)

我有一个非常奇怪的具体项目,需要在多个窗口弹出窗口中打开一些照片。(我理解这个的可用性,请暂时忽略它。)
我在body load上运行下面的脚本,到目前为止,它工作得 * 有些 *:

// Popup window code
function runPopups() {
  popupWin1 = setInterval(
    function() {
      window.open('assets/pic1.jpg', '_blank', 'width=490,height=300,left=-1000,top=-1000')
    }, 3000);
  //clearInterval(popupWin1);

  popupWin2 = setInterval(
    function() {
      window.open('assets/pic2.jpg', '_blank', 'width=600,height=500,left=0,top=0')
    }, 3000);
  //clearInterval(popupWin2);
}

它实际上似乎只是加载了一次,然后不断地循环回去。当我添加clearInterval参数时,它完全破坏了脚本。我已经很接近了,但不确定我做错了什么,因为javascript不是我的主要理解。我觉得我要么不知何故错过了一个循环,要么我需要把它放在一个完全不同的函数中?
理想情况下,我希望每张照片弹出在屏幕上的一个随机点,与不同的延迟时间奖金,如果每一个可以越来越快。我将有大约10-20张照片弹出。帮助是非常感谢!

qhhrdooz

qhhrdooz1#

你想用一个for循环和setTimeout来单独调度每个弹出窗口,如果每个弹出窗口有不同的名称和参数,你可以把它存储在一个数组中,然后用一个for循环来遍历它。

const popups = [
  {
    url: 'assets/pic1.jpg',
    params: 'width=490,height=300,left=-1000,top=-1000',
  },
  {
    url: 'assets/pic2.jpg',
    params: 'width=600,height=500,left=0,top=0',
  },
  // Add the rest here
];

function runPopups() {
  for (let i = 0; i < popups.length; i++) {
    setTimeout(
      () => window.open(popups[i].url, '_blank', popups[i].params),
      (i + 1) * 3000
    );
  }
}

示例:https://stackblitz.com/edit/typescript-2rgp5n?file=index.ts
您计划第一个在3秒后弹出,第二个在6秒后弹出,第三个在9秒后弹出,等等。如果您希望第一个立即出现,只需删除+ 1

lrl1mhuk

lrl1mhuk2#

试试这个

// Popup window code
const assets = [{
  url: 'assets/pic1.jpg',
  settings: 'width=490,height=300,left=-1000,top=-1000'
}, {
  url: 'assets/pic2.jpg',
  settings: 'width=600,height=500,left=0,top=0'
}]
const runPopups = () => {
  for (i = 0; i < assets.length; i++) {
    window.open(assets[i].url, '_blank', assets[i].settings);
  }
};
runPopups();
setInterval(runPopups, 3000);
cngwdvgl

cngwdvgl3#

使用setTimeout而不是setInterval,因为setInterval意味着每3秒打开一次弹出窗口,这就是它反复打开的原因

// Popup window code
function runPopups() {
  window.open('assets/pic1.jpg', '_blank', 'width=490,height=300,left=-1000,top=-1000')
  setTimeout(function() {
      window.open('assets/pic2.jpg', '_blank', 'width=600,height=500,left=0,top=0')
    }, 3000);
  //clearInterval(popupWin2);
}

相关问题