Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
DCloud
uni-app
提交
441e8e07
U
uni-app
项目概览
DCloud
/
uni-app
3 个月 前同步成功
通知
725
Star
38705
Fork
3642
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
7
列表
看板
标记
里程碑
合并请求
1
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
U
uni-app
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
7
Issue
7
列表
看板
标记
里程碑
合并请求
1
合并请求
1
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
441e8e07
编写于
9月 08, 2020
作者:
Q
qiang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix: 修复安卓平台 web-view 组件内 input 被软键盘遮挡的问题 question/92008
上级
fdf0df0e
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
25 addition
and
11 deletion
+25
-11
src/core/view/mixins/keyboard.js
src/core/view/mixins/keyboard.js
+25
-11
未找到文件。
src/core/view/mixins/keyboard.js
浏览文件 @
441e8e07
...
@@ -13,18 +13,26 @@ function showSoftKeybord () {
...
@@ -13,18 +13,26 @@ function showSoftKeybord () {
})
})
}
}
function
setSoftinputTemporary
(
vm
)
{
function
setSoftinputTemporary
(
vm
,
reset
)
{
plusReady
(()
=>
{
plusReady
(()
=>
{
const
MODE_ADJUSTRESIZE
=
'
adjustResize
'
const
MODE_ADJUSTPAN
=
'
adjustPan
'
const
MODE_NOTHING
=
'
nothing
'
const
currentWebview
=
plus
.
webview
.
currentWebview
()
const
currentWebview
=
plus
.
webview
.
currentWebview
()
const
style
=
currentWebview
.
getStyle
()
||
{}
const
style
=
currentWebview
.
getStyle
()
||
{}
const
rect
=
vm
.
$el
.
getBoundingClientRect
()
const
options
=
{
currentWebview
.
setSoftinputTemporary
&&
currentWebview
.
setSoftinputTemporary
({
mode
:
(
reset
||
style
.
softinputMode
===
MODE_ADJUSTRESIZE
)
?
MODE_ADJUSTRESIZE
:
(
vm
.
adjustPosition
?
MODE_ADJUSTPAN
:
MODE_NOTHING
),
mode
:
style
.
softinputMode
===
'
adjustResize
'
?
'
adjustResize
'
:
(
vm
.
adjustPosition
?
'
adjustPan
'
:
'
nothing
'
),
position
:
{
position
:
{
top
:
rect
.
top
,
top
:
0
,
height
:
rect
.
height
+
(
Number
(
vm
.
cursorSpacing
)
||
0
)
height
:
0
}
}
})
}
if
(
options
.
mode
===
MODE_ADJUSTPAN
)
{
const
rect
=
vm
.
$el
.
getBoundingClientRect
()
options
.
position
.
top
=
rect
.
top
options
.
position
.
height
=
rect
.
height
+
(
Number
(
vm
.
cursorSpacing
)
||
0
)
}
currentWebview
.
setSoftinputTemporary
(
options
)
})
})
}
}
...
@@ -60,6 +68,7 @@ function resetSoftinputNavBar (vm) {
...
@@ -60,6 +68,7 @@ function resetSoftinputNavBar (vm) {
}
}
}
}
let
resetTimer
let
isAndroid
let
isAndroid
let
osVersion
let
osVersion
if
(
__PLATFORM__
===
'
app-plus
'
)
{
if
(
__PLATFORM__
===
'
app-plus
'
)
{
...
@@ -127,6 +136,7 @@ export default {
...
@@ -127,6 +136,7 @@ export default {
el
.
addEventListener
(
'
focus
'
,
()
=>
{
el
.
addEventListener
(
'
focus
'
,
()
=>
{
focus
=
true
focus
=
true
clearTimeout
(
resetTimer
)
document
.
addEventListener
(
'
click
'
,
iosHideKeyboard
,
false
)
document
.
addEventListener
(
'
click
'
,
iosHideKeyboard
,
false
)
if
(
__PLATFORM__
===
'
app-plus
'
)
{
if
(
__PLATFORM__
===
'
app-plus
'
)
{
...
@@ -137,12 +147,14 @@ export default {
...
@@ -137,12 +147,14 @@ export default {
})
})
if
(
__PLATFORM__
===
'
app-plus
'
)
{
if
(
__PLATFORM__
===
'
app-plus
'
)
{
// 安卓单独隐藏键盘后点击输入框不会触发 focus 事件
el
.
addEventListener
(
'
click
'
,
()
=>
{
el
.
addEventListener
(
'
click
'
,
()
=>
{
if
(
!
this
.
disabled
&&
focus
&&
keyboardHeight
===
0
)
{
if
(
!
this
.
disabled
&&
focus
&&
keyboardHeight
===
0
)
{
setSoftinputTemporary
(
this
)
setSoftinputTemporary
(
this
)
}
}
})
})
if
(
!
isAndroid
&&
parseInt
(
osVersion
)
<
12
)
{
if
(
!
isAndroid
&&
parseInt
(
osVersion
)
<
12
)
{
// iOS12 以下系统 focus 事件设置较迟,改在 touchstart 设置
el
.
addEventListener
(
'
touchstart
'
,
()
=>
{
el
.
addEventListener
(
'
touchstart
'
,
()
=>
{
if
(
!
this
.
disabled
&&
!
focus
)
{
if
(
!
this
.
disabled
&&
!
focus
)
{
setSoftinputTemporary
(
this
)
setSoftinputTemporary
(
this
)
...
@@ -157,6 +169,12 @@ export default {
...
@@ -157,6 +169,12 @@ export default {
if
(
__PLATFORM__
===
'
app-plus
'
)
{
if
(
__PLATFORM__
===
'
app-plus
'
)
{
document
.
removeEventListener
(
'
keyboardchange
'
,
keyboardChange
,
false
)
document
.
removeEventListener
(
'
keyboardchange
'
,
keyboardChange
,
false
)
resetSoftinputNavBar
(
this
)
resetSoftinputNavBar
(
this
)
if
(
isAndroid
)
{
// 还原安卓软键盘配置,避免影响 web-view 组件
resetTimer
=
setTimeout
(()
=>
{
setSoftinputTemporary
(
this
,
true
)
},
300
)
}
}
}
// 修复ios端显示与点击位置错位的Bug by:wyq
// 修复ios端显示与点击位置错位的Bug by:wyq
...
@@ -169,10 +187,6 @@ export default {
...
@@ -169,10 +187,6 @@ export default {
focus
=
false
focus
=
false
onKeyboardHide
()
onKeyboardHide
()
})
})
this
.
$on
(
'
hook:beforeDestroy
'
,
()
=>
{
onKeyboardHide
()
})
}
}
}
}
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录