小编koe*_*ehr的帖子

当移动safari或chrome上的屏幕键盘打开时,是否有任何javascript事件被触发?

我尝试对Web应用程序中的屏幕键盘做出反应.不幸的是,有些事情使这一点变得复杂:

首先,该应用程序必须在移动平台(平板电脑)和台式机上运行.此外,禁止滚动文档/正文并进一步增加趣味,平板电脑必须使用横向模式.

因此,如果有人选择任何输入字段,屏幕上的键盘会打开并阻挡页面一半的视线,因此一些输入变得不可见,我需要更改它.

不幸的是,似乎没有任何事件被触发,这表明应用程序的一半变得不可见.我已经检查过滚动并调整事件大小,但它们也没有触发.

当然,一旦我确定要在平板电脑上,我总会以某种方式做出反应.可能95%的用户无论如何都不会连接硬件键盘.但是,有没有更清洁的方式?

javascript android on-screen-keyboard ios

13
推荐指数
2
解决办法
2万
查看次数

for循环中的javascript'let'和'var'

在我搜索具体数字以支持constJavascript中关键字的使用时,我偶然发现了所有三种变量声明类型var,let和const之间的性能比较.我不喜欢测试设置,所以我创建了一个简化版.

我没想到会有太大差异,Firefox的测量结果符合我的预期:

Firefox 52上的jsPerf结果

但在Chromium发生了一些奇怪的事情:

Chrome 57上的jsPerf结果

不仅所有测试结果都显着降低,而且let在循环内部分解为速度的一小部分.

我决定在Browserstack中运行测试,以确保它不是我古怪的Linux设置.同样与那里发生Firefox 53,并Chrome 58在Windows 10,我甚至测试年纪较大的Chrome 50,并得到了相同的行为.

到底是怎么回事?这是一个错误吗?

编辑:有人评论说,循环可能只是因为它什么都不做而被优化掉了.为了表明,事实并非如此,我改变了测试.

javascript performance firefox google-chrome ecmascript-6

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

为什么这个Elixir代码这么慢?

我目前对学习Elixir非常感兴趣,而我学习新语言的典型方法是用它来构建简单的程序.

所以我决定编写一个(非常简单的)类似grep的程序(或模块),如下所示:

defmodule LineMatch do
  def file(s, path) do
    case File.open(path, [:read]) do
      {:ok, fd} -> match s, fd
      {_, error} -> IO.puts "#{:file.format_error error}"
    end
  end
  defp match(s, fd) do
    case IO.read fd, :line do
      {:error, error} -> IO.puts("oh noez! Error: #{error}")
      line -> match(s, line, fd)
    end
  end
  defp match(s, line, fd) when line !== :eof do
    if String.contains?(line, s) do
      IO.write line
    end
    match(s, IO.read(fd, :line), fd)
  end
  defp match(_, _line, _) when _line === :eof do …
Run Code Online (Sandbox Code Playgroud)

elixir

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

在Vue.js中添加外部处理的元素?

我发现很多库以某种方式将外部库(及其DOM元素)与Vue.js结合在一起.所有这些似乎只是将子元素添加到Vue.js管理的DOM节点.

我编写了Vue-Stripe-Elements以便更容易地使用新的Stripe V3,但很难将Stripes元素安装到Vue组件.

显而易见的方法是这样的.vue组件:

<template>
</template>

<script>
export default {
  // could also be `mounted()`
  beforeMount () {
    const el = Stripe.elements.create('card')
    el.mount(this.$el)
  }
}
</script>
Run Code Online (Sandbox Code Playgroud)

如果Stripe只将子元素添加到它所安装的元素中,那么这将起作用,但它看起来像Stripe而是转换或替换给定的DOM节点.条纹当然也不支持任何VNodes.

我目前解决这个问题的方法是创建一个真正的DOM节点并将其添加为子节点:

<template>
</template>

<script>
export default {
  mounted () {
    const dom_node = document.createElement('div')
    const el = Stripe.elements.create('card')
    el.mount(dom_node)
    this.$el.appendChild(el)
  }
}
</script>
Run Code Online (Sandbox Code Playgroud)

它有效,但感觉我在这里与Vue.js作战,我可能会在这里产生奇怪的副作用.或者我只是做其他附加库手动做的事情,这是最好的方法吗?

是否有"官方"方式来做到这一点?

在此先感谢任何有用的评论.

javascript dom stripe-payments vue.js vuejs2

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