小编Jaw*_*ser的帖子

加载Google地图控件元素时的回调

我发现其他堆栈溢出问题表明使用'idle'事件是在谷歌地图完全加载时触发回调的方法.但在我的情况下,我想运行一些代码将一些文本注入到地图UI中的一个元素中,但我发现在创建这些元素之前"空闲"会触发.

为了明确,我将一个初始化函数附加到窗口的加载方法:

google.maps.event.addDomListener(window, 'load', initialize);
Run Code Online (Sandbox Code Playgroud)

在初始化内部,我创建了一些UI元素并将它们附加到地图:

function initialize() {
  map = new google.maps.Map(document.getElementById("map-div"), mapOptions);
  ...
  // set up the controls div 
  var controlsDiv = document.createElement('div');
  controlsDiv.id="cd";
  controlSetup(controlsDiv);
  map.controls[google.maps.ControlPosition.RIGHT_TOP].push(controlsDiv);
}
Run Code Online (Sandbox Code Playgroud)

好的,但是我想做的就是一旦准备好就运行一个函数.在我的情况下,我将在控件div中插入更多文本,所以我需要那些在那里.

我已经尝试过这个作为initialize方法的最后一行:

google.maps.events.addListenerOnce(map,'idle',emitText);
Run Code Online (Sandbox Code Playgroud)

但是,emitText有一行尝试getElementById("cd")(地图上的controlsDiv),但我得到它是null,因为在CONTROLDiv实际完成加载之前,emitText已经触发了.

那么,问题是如何检测地图的完整加载,包括任何UI div.我的测试表明,'DOM'事件是在UI元素加载并在DOM中访问之前触发的.提前致谢!

javascript google-maps

8
推荐指数
1
解决办法
786
查看次数

如何创建并附加到 Vec<Struct>?

以下内容无法编译:

struct A {
    f: u16,
}

fn main() {
    let v: Vec<A> = Vec::new();
    let a = A { f: 42 };
    v.append(a);
}
Run Code Online (Sandbox Code Playgroud)

但编译器消息似乎引导我走上了错误的道路:

struct A {
    f: u16,
}

fn main() {
    let v: Vec<A> = Vec::new();
    let a = A { f: 42 };
    v.append(a);
}
Run Code Online (Sandbox Code Playgroud)

编辑代码以调用append对 的引用a

v.append(&mut a);
Run Code Online (Sandbox Code Playgroud)

也无法编译,但有一个令人惊讶的(对我来说)消息:

error[E0308]: mismatched types
 --> src/main.rs:8:14
  |
8 |     v.append(a);
  |              ^ expected mutable reference, found struct `A`
  |
  = note: expected …
Run Code Online (Sandbox Code Playgroud)

struct vector rust

6
推荐指数
1
解决办法
3万
查看次数

当使用 ReadBytesExt 从字节切片中读取整数时,为什么会收到错误“不满足特征边界”?

以下 Rust 代码无法编译。

extern create byteorder;
use byetorder::{LittleEndian, ReadBytesExt};

fn main() {                                                                          
    let buf: [u8; 12] = [                                                                     
        0x00, 0x42, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x30,               
    ];
    let id = &buf[0..1].read_u16::<LittleEndian>();              }
Run Code Online (Sandbox Code Playgroud)

来自编译器的消息:

extern create byteorder;
use byetorder::{LittleEndian, ReadBytesExt};

fn main() {                                                                          
    let buf: [u8; 12] = [                                                                     
        0x00, 0x42, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x30,               
    ];
    let id = &buf[0..1].read_u16::<LittleEndian>();              }
Run Code Online (Sandbox Code Playgroud)

u16Stack Overflow 上有非常相似的问题,我已经评论过,但我的问题与那些问题略有不同,因为我试图从切片中读取 a 。在实践中,我不确定为什么我的例子有本质上的不同,我确信我错过了一些明显的东西。

具体来说,我不清楚我所得到的与此处接受的答案中的内容有何显着不同:

如何将字节切片 (&[u8]) 的缓冲区转换为整数? …

arrays casting reference slice rust

4
推荐指数
1
解决办法
4723
查看次数

如何按顺序播放多个音频文件

我有几个长篇故事,其源音频是逐句音频文件。我想创建一个网页,可以在其中多次听特定故事的单个句子,或者从头到尾听整个故事。

首先,我的网页有很多<audio>元素,每个元素都<p>与相应的文本放在一起。这些<audio>元素中的每一个都对应于故事的一个句子。

我即将开始编写一个 javascript 对象,它将允许某种“全部播放”功能,您单击按钮,它会播放音频 [0],完成后,音频 [1] 等。它还会有一个“暂停”按钮并跟踪您所在的位置等。这样各个句子仍然可以播放或欣赏,因为它们每个都有一个audio元素。或者,可以使用顶部的“全部播放”按钮将audio元素序列视为一个大元素。

然后我开始问自己这里是否有更好/更简单/更规范的解决方案。我想做的一件事是将所有这些单独的音频文件组合成一个大的音频文件,并可能创建“章节”<track>元素。这是可取的吗?

每种方法的优缺点是什么?是否有一些现成的解决方案已经为我制作,但我根本没有出现?

html javascript html5-audio

3
推荐指数
1
解决办法
3467
查看次数

Python:在生成器对象上调用list()会产生不正确的结果

我正在研究这个问题的公认解决方案,解决方案提供了一种算法的Python实现,用于按字典顺序生成唯一的排列.我有一个缩短的实现:

def permutations(seq):
    seq = sorted(seq)
    while True:
        yield seq
        k = l = None
        for k in range(len(seq) - 1):
            if seq[k] < seq[k + 1]:
                l = k + 1
                break
        else:
            return

        (seq[k], seq[l]) = (seq[l], seq[k])
        seq[k + 1:] = seq[-1:k:-1]
Run Code Online (Sandbox Code Playgroud)

对我来说真正奇怪的是,如果我调用list此函数的输出,我会得到错误的结果.但是,如果我一次迭代一个函数的结果,我会得到预期的结果.

>>> list(permutations((1,2,1)))
[[2, 1, 1], [2, 1, 1], [2, 1, 1]]
>>> for p in permutations((1,2,1)):
...   print(p)
... 
[1, 1, 2]
[1, 2, 1]
[2, 1, 1] …
Run Code Online (Sandbox Code Playgroud)

python iterable yield list generator

3
推荐指数
1
解决办法
223
查看次数

for循环数语法上限的bash变量

如果我创建一个像这样的 bash 循环,使用文字数字,一切都按预期工作:

#!/bin/bash
for i in {1..10};  do
  echo $i 
done
Run Code Online (Sandbox Code Playgroud)

输出是:

1
2
3
4
5
6
7
8
9
10
Run Code Online (Sandbox Code Playgroud)

但是如果我想在变量中使用上限,我似乎无法正确使用。这是我的四次尝试:

#!/bin/bash
n=10

for i in {1..$n};  do
  echo $i 
done

for i in {1.."$n"}; do 
  echo $i
done

for i in {1..${n}};  do
  echo $i 
done

for i in {1.."${n}"};  do
  echo $i 
done
Run Code Online (Sandbox Code Playgroud)

现在的输出是:

{1..10}
{1..10}
{1..10}
{1..10}
Run Code Online (Sandbox Code Playgroud)

不是我想要的... :(

要清楚这个问题:

如何在 bash for 循环中使用变量作为范围语法的限制?

variables bash for-loop

2
推荐指数
1
解决办法
2810
查看次数

为什么removeEventListener不起作用?

我不确定这里有什么问题,但是在chrome和firefox中测试,我发现我在javascript中从一个元素中删除一个EventListener时做错了.

上下文是一个画布游戏.首先,会显示一个启动画面,您可以单击该界面开始游戏.点击开始后,我想删除监听器.

主要的兴趣点是startGame函数中的removeEventListener.它不会引发错误.代码执行(我在控制台中看到游戏启动消息,我可以看到"这个"是游戏实例).我完全很困惑为什么如果我继续点击画布每次运行startGame.预期的行为是,一旦删除了EventListener,单击那里就不会执行任何操作.

救命!

function Game(canvas) {
  this.c = canvas;
  this.ctx = this.c.getContext("2d");
  this.c.width = CANVAS_WIDTH;
  this.c.height = CANVAS_HEIGHT;

  // Background image
  this.bgReady = false;
  this.bgImage = new Image();
  this.bgImage.onload = function () {
    window.g.bgReady = true;
  };
  this.bgImage.src = MAIN_BACKGROUND;
}


Game.prototype.setSplash = function() {
  if (this.bgReady) {
    this.ctx.drawImage(window.g.bgImage, 0, 0);
    this.ctx.font="48px Helvetica";
    this.ctx.textAlign = "center";
    this.ctx.fillStyle="rgb(0,0,255)";
    this.ctx.fillText("Click To Start",310,240);
    document.getElementById("cnvs").addEventListener(
      'click',this.startGame.bind(this),true);
  } else {
    // since setSplash is an early function
    // wait a bit for the background …
Run Code Online (Sandbox Code Playgroud)

javascript event-listener event-handling

1
推荐指数
1
解决办法
4612
查看次数

How do I implement a trait for an enum and its respective variants?

我正在尝试使用枚举变量来捕获本质上是异构的(具有不同的字段集合)但从协议角度来看属于相同“类型”的数据。但是,我不确定如何实现特定于子类型的方法和特征。这是一个最小的示例,说明如何创建数据枚举以及可以使用枚举变量构造函数来指定类型,但是如果我在变量上实现特征,则无法确定调用该函数的方法。

use std::fmt;

enum Data {
    N(NData),
    S(SData),
}

struct NData {
    numeric: u32,
}

impl fmt::Display for NData {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        write!(f, "{}", self.numeric)
    }
}

struct SData {
    stringy: Vec<String>,
}

fn main() {
    let d_n: Data = Data::N(NData { numeric: 0x0 });
    let n = NData { numeric: 0xff };

    // Fails, fmt::Display not implemented for Data
    println!("{}", d_n);

    // Just fine!
    println!("{}", n);
}
Run Code Online (Sandbox Code Playgroud)

enums rust

1
推荐指数
1
解决办法
187
查看次数