【问题标题】:Javascript: Can't override variableJavascript:无法覆盖变量
【发布时间】:2018-04-14 17:32:44
【问题描述】:

为了好玩和学习,我最近开始编写自己的 html canvas 项目。现在我差不多完成了,我只想将其上传到 Wallpaper Engine,用户可以将其设置为自己的动画壁纸。

为此,我想为用户提供一些壁纸选项的可能性。

我已按照您可以找到here的说明进行操作

现在我有以下问题,选项的变量不会全局更改,只是在其父级内部。见代码:

var scale = 1,
    dotsize = 1,
    dotgap = 8,
    text = 'example',
    fontFamily = 'Arial',
    fontSize = 300,
    radius = 200;



window.wallpaperPropertyListener = {
  applyUserProperties: function(properties) {
    if (properties.text) {
      text = properties.text.value;
      alert(text)
    }
  }
};
alert(text)

从 Wallpaper Engine 获取内容后的第一个警报显示正确的文本(无论用户在文本字段中输入的内容)

但是,最后的警报会显示我上面设置的“示例”字符串。

我尝试了不同的方法,例如使用 window.text 或 var text 等,但无法弄清楚。

【问题讨论】:

  • 第二次 alert() 调用发生在侦听器被调用之前,您希望如何显示其他内容?
  • 这只是意味着最后一个alert(text)wallpaperPropertyListener() 中的那个之前被调用。如果applyUserProperties 被异步调用,则可能会发生这种情况,例如按计时器。
  • 在页面加载时首先触发事件侦听器之外的第二个警报。侦听器中的第二个正在等待指定的事件,并且仅在该事件发生后才执行

标签: javascript variables wallpaper


【解决方案1】:

wallpaperPropertyListener 只是一个函数定义,在被调用之前不会执行。所以从javascript的角度来看,它只是看到你的函数定义没有执行,然后继续你的第二个警报。希望这会有所帮助

【讨论】:

  • 但是为什么我会看到第一个警报呢?可能是因为壁纸引擎本身在加载完其余部分后最终调用它?
  • 因为在第二次警报之后有一些步骤在调用您的wallpaperPropertyListener。我认为这里混淆的主要来源是定义一个函数与调用它之间。在您调用 wallPaperPropertyListener 函数之前,您的 text 属性不会改变。
  • 我到底要输入什么,我不知道如何在警报之前调用函数? wallpaperPropertyListener 不只是一个变量,其中 applyUserProperties 是其中之一吗?试着写了几件没用的东西
  • 我快速阅读了您发送的链接。看起来,在您加载文件后,有些东西会读取 wallpaperPropertyListener 属性。除非你能明确告诉我为什么要显示警报,否则我无法提供替代方案。
  • 警报仅用于测试目的,因为壁纸引擎中没有控制台。我只是想实现在脚本的其余部分之前加载壁纸属性...
猜你喜欢
  • 1970-01-01
  • 2015-07-04
  • 2023-03-15
  • 2015-03-13
  • 1970-01-01
  • 2020-02-12
  • 2015-02-25
  • 1970-01-01
  • 2021-05-25
相关资源
最近更新 更多