首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多次执行函数

多次执行函数
EN

Stack Overflow用户
提问于 2017-12-30 01:21:11
回答 1查看 72关注 0票数 0

我不能让下面的代码正常工作。不幸的是,谷歌并没有帮上忙。

我想要的是该函数立即执行,然后在所有内容加载后再次执行(对于移动Chrome中的数据保存选项似乎更安全),并在任何时候调整窗口大小。

我极大地减少了代码,所以很容易看到发生了什么,而代码基本上仍然在做它应该做的事情。

但是例如,classList.toggle不能在火狐和Chrome中工作,它没有给这个类,只给了一个空的类属性。IE 11给出了正确的类。

谢谢你的任何提示!

代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en">
<meta charset="utf-8">
<title>Test</title>
<style>

* {
    margin: 0;
    padding: 20px;
    border: none;
    }

p {
    color: black;
    }

body.state-2 p {
    color: red;
    }

h2 {
    position: static;
    }

@media only screen and (max-width: 1250px) {

h2 {
    position: relative;
    }

}

</style>

<body>

<h2>Headline</h2>

<p>Hello</p>

<script>

function toggleState()
{
    var toggle = document.querySelector('h2');
    var container = document.querySelector('body');
    if (window.getComputedStyle(toggle,null).getPropertyValue('position') == 'relative')
    {
        toggle.setAttribute('role', 'button');
    }
    else
    {
        toggle.removeAttribute('role');
    }
    toggle.addEventListener('click', function()
    {
        container.classList.toggle('state-2');
    }
    );
}

toggleState();
window.onload = toggleState;
window.onresize = toggleState;

</script>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-30 02:15:00

似乎您在每次调整大小事件时都会添加一个新的侦听器:

代码语言:javascript
复制
toggle.addEventListener('click', function(){...});

你也会一次又一次地发现这些元素:

代码语言:javascript
复制
var toggle = document.querySelector('h2');
var container = document.querySelector('body');

您可以使用闭包来解决这两个问题:

代码语言:javascript
复制
function toggleState(toggle) {
  if (window.getComputedStyle(toggle, null).getPropertyValue('position') == 'relative') {
    toggle.setAttribute('role', 'button');
  }
  else {
    toggle.removeAttribute('role');
  }
}

function setup() {
  var toggle = document.querySelector('h2');
  var container = document.querySelector('body');

  toggle.addEventListener('click', function () {
    container.classList.toggle('state-2');
  });
  window.addEventListener('load', function() { toggleState(toggle) });
  window.addEventListener('resize', function() { toggleState(toggle) });
}

setup();

通过这种方式,侦听器只创建一次,对元素的引用保存在setup函数内的一个局部变量中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48026102

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档