我尝试对Web应用程序中的屏幕键盘做出反应.不幸的是,有些事情使这一点变得复杂:
首先,该应用程序必须在移动平台(平板电脑)和台式机上运行.此外,禁止滚动文档/正文并进一步增加趣味,平板电脑必须使用横向模式.
因此,如果有人选择任何输入字段,屏幕上的键盘会打开并阻挡页面一半的视线,因此一些输入变得不可见,我需要更改它.
不幸的是,似乎没有任何事件被触发,这表明应用程序的一半变得不可见.我已经检查过滚动并调整事件大小,但它们也没有触发.
当然,一旦我确定要在平板电脑上,我总会以某种方式做出反应.可能95%的用户无论如何都不会连接硬件键盘.但是,有没有更清洁的方式?
在我搜索具体数字以支持const
Javascript中关键字的使用时,我偶然发现了所有三种变量声明类型var,let和const之间的性能比较.我不喜欢测试设置,所以我创建了一个简化版.
我没想到会有太大差异,Firefox的测量结果符合我的预期:
但在Chromium发生了一些奇怪的事情:
不仅所有测试结果都显着降低,而且let
在循环内部分解为速度的一小部分.
我决定在Browserstack中运行测试,以确保它不是我古怪的Linux设置.同样与那里发生Firefox 53
,并Chrome 58
在Windows 10,我甚至测试年纪较大的Chrome 50
,并得到了相同的行为.
到底是怎么回事?这是一个错误吗?
编辑:有人评论说,循环可能只是因为它什么都不做而被优化掉了.为了表明,事实并非如此,我改变了测试.
我目前对学习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) 我发现很多库以某种方式将外部库(及其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节点.条纹当然也不支持任何VNode
s.
我目前解决这个问题的方法是创建一个真正的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 ×3
android ×1
dom ×1
ecmascript-6 ×1
elixir ×1
firefox ×1
ios ×1
performance ×1
vue.js ×1
vuejs2 ×1