cbvirtua 1.0.86 → 1.0.88
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/7.zip
ADDED
|
Binary file
|
package/element-dev.zip
ADDED
|
Binary file
|
package/package.json
CHANGED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
var page = document.querySelector('.page')
|
|
2
|
+
var currentInput = null // 当前聚焦的输入框
|
|
3
|
+
var lastInnerHeight = window.innerHeight
|
|
4
|
+
|
|
5
|
+
function calcScrollTop (visualHeight, scrollObj) {
|
|
6
|
+
scrollObj = scrollObj || window
|
|
7
|
+
var currentInputTop = currentInput.getBoundingClientRect().top
|
|
8
|
+
// 已经偏移(滚动)的量
|
|
9
|
+
var yOffset = window.pageYOffset
|
|
10
|
+
if (scrollObj !== window) {
|
|
11
|
+
yOffset = scrollObj.scrollTop
|
|
12
|
+
}
|
|
13
|
+
// 不在可视视口中
|
|
14
|
+
// 被软键盘遮住
|
|
15
|
+
if (currentInputTop > visualHeight) {
|
|
16
|
+
content.innerText += ' 软1'
|
|
17
|
+
scrollObj.scrollTo(0, yOffset + currentInputTop - visualHeight / 2 + currentInput.offsetHeight / 2)
|
|
18
|
+
// 滚上去了可视视口,被视口遮住
|
|
19
|
+
} else if (currentInputTop < 0) {
|
|
20
|
+
content.innerText += ' 软2'
|
|
21
|
+
scrollObj.scrollTo(0, yOffset - currentInputTop - visualHeight / 2 + currentInput.offsetHeight / 2)
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function handleClickPage (e) {
|
|
26
|
+
var el = e || window.event
|
|
27
|
+
if (/^input$/i.test(el.target.tagName)) {
|
|
28
|
+
currentInput = el.target
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function handleAndroidResize () {
|
|
33
|
+
var resizeHeight = lastInnerHeight - window.innerHeight // 本次变动量
|
|
34
|
+
lastInnerHeight = window.innerHeight // 记录目前的可视窗口高度,以便下次计算resize变动量
|
|
35
|
+
// 弹出软键盘
|
|
36
|
+
if (resizeHeight > 200 && currentInput) {
|
|
37
|
+
setTimeout(function () {
|
|
38
|
+
// 第二个参数,如果当前布局结构是页面容器设置了高度和可视视口高度一样,滚动条是属于这个H5容器的而不是window,如例子中的div.page,
|
|
39
|
+
// 则第二个参数要传滚动容器的dom对象,如 document.querySelector('.page')
|
|
40
|
+
calcScrollTop(window.innerHeight, window)
|
|
41
|
+
}, 150)
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function focusinPage (e) {
|
|
46
|
+
currentInput = (e || window.event).target
|
|
47
|
+
setTimeout(function () {
|
|
48
|
+
// 第二个参数采用默认的window,在ios中不论页面布局怎样,只要软键盘出现前已经出现过可视视口的,那么软键盘出现后必然能通过webview平移看得到
|
|
49
|
+
calcScrollTop(window.visualViewport.height)
|
|
50
|
+
}, 300)
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// ios情况下
|
|
54
|
+
if (/iphone|ipad|ipod|ios/i.test(navigator.userAgent)) {
|
|
55
|
+
page.addEventListener('focusin', focusinPage)
|
|
56
|
+
} else {
|
|
57
|
+
page.addEventListener('click', handleClickPage, true)
|
|
58
|
+
window.addEventListener('resize', handleAndroidResize)
|
|
59
|
+
}
|