iScroll 4 폼 요소 초점 및 키보드 이상 문제
6329 단어 scroll
원문 주소: http://www.zawaliang.com/2013/10/443.html
문제: iSroll 4 를 사용 한 용기 에서 폼 요소 focus 가 초점 을 맞 춘 후 키보드 가 나타 날 때 iSroll 영역 높이 가 업데이트 되 지 않 고 스크롤 이상 문제 가 발생 할 수 있 습 니 다.또한 현재 초점 을 맞 춘 폼 요 소 는 시각 적 인 지역 에 나타 나 지 않 고 사용자 체험 에 영향 을 줄 수 있 습 니 다.
iKeyboard Scroll 4 는 바로 이러한 해결 방안 입 니 다. Github 참조: https://github.com/zawaliang/iKeyboardScroll4
현재 대부분의 기종 은 onorientationchange 이 벤트 를 지원 합 니 다. iScroll 4 는 onorientationchange 이 벤트 를 지원 하지 않 는 기종 에서 onresize 이 벤트 를 사용 하여 스크롤 영역 을 자동 으로 새로 고침 합 니 다.그래서 위 에서 말 한 폼 의 경우 대부분 기종 에서 고도 가 갱신 되 지 않 는 상황 이 존재 한다.
RESIZE_EV = 'onorientationchange' in window ? 'orientationchange' : 'resize',
문 제 는 키보드 의 출현 여 부 를 확인 하고 refresh 인터페이스 로 스크롤 영역 높이 를 새로 고 치 는 것 이다.키보드 상 태 를 감지 할 인터페이스 가 없 기 때문에 onresize 를 통 해 창 높이 변 화 를 감지 하고 현재 요소 의 초점 상태 에 맞 춰 키보드 상 태 를 모 의 합 니 다.키보드 가 나 올 때 화면 을 뒤 집 는 상황 도 고려 해 야 한다.
오리 엔 테 이 션 change 와 onresize 중 어느 것 이 먼저 촉발 되 는 지 확실 하지 않 으 며, 안 드 로 이 드 에서 오리 엔 테 이 션 change 를 가 져 온 후 고도 에 시간 차 가 존재 하기 때문에 onresize 로 통일 하여 처리 합 니 다.
$(window).on('orientationchange', function(e) {
_landscape2 = !!(window.orientation & 2);
}).on('resize', function(e) {
// orientationchange onresize ,
setTimeout(function() {
// Android orientationchange window
if (_landscape != _landscape2) {
// ,
if (_display) {
var tmpWidth = _initWinWidth;
_initWinWidth = _initWinHeight;
_initWinHeight = tmpWidth;
} else {
_initWinWidth = $(window).width();
_initWinHeight = $(window).height();
}
}
var h = $(window).height();
_display = _activeElement !== null && _initWinHeight > h;
$.each(_callback, function(k, v) {
v.apply(null, [_display, _activeElement]);
});
_landscape = _landscape2;
}, 200);
});
초점 요소 가 존재 하고 창 높이 가 초기 화 된 창 높이 보다 시간 이 높 으 면 키보드 가 나 타 났 다 고 생각 합 니 다.
_display = _activeElement !== null && _initWinHeight > h;
키보드 의 문제 가 해결 되 었 습 니 다. 우 리 는 초점 요소 의 위치 문 제 를 해결 해 야 합 니 다. 그렇지 않 으 면 초점 요소 가 시각 영역 에 없 는 상황 이 발생 할 수 있 습 니 다. 사용 자 는 현재 입력 한 것 이 무엇 인지 전혀 모 릅 니 다.주의해 야 할 것 은 iOS 6 에서 시스템 이 초점 을 맞 추 는 요 소 를 자동 으로 찾 을 수 있 지만 업 그 레이 드 된 iOS 7 은 '정상' 이 아니 라 안 드 로 이 드 와 비슷 하 게 표현 되 기 때문에 우 리 는 비 iOS 6 와 iOS 7 만 처리 하면 된다 는 것 이다.
// ,
// iOS6 , refresh
// iOS7 , Android
if ((!$.os.ios || _ios7)
&& display && focusElement) {
offset = $.type(offset) == 'number' ? offset : 5;
var el = $(focusElement),
winHeight = $(window).height(),
top = el.height() + el.offset().top + offset;
// iScrollInstance.y
if (top - iScrollInstance.y > winHeight) {
iScrollInstance.scrollTo(0, winHeight - top + iScrollInstance.y, 0);
}
// iOS7 , ,
_ios7 && focusElement.focus();
}
iOS 7 하면 이상 한 점 이 있 습 니 다. 입력 상 자 를 누 르 면 키보드 가 나타 나 지만 입력 상 자 는 초점 을 맞 추 지 않 습 니 다.수 동 으로 한 번 더 클릭 해 야 합 니 다.초보적인 조 사 는 iScroll 4 의 문제 이지 만 무슨 문제 가 생 겼 는 지 모 르 기 때문에 iKeyboard Scroll 4 에서 이러한 상황 을 처리 하여 이 문 제 를 잠시 해결 했다.
모 바 일 웹 앱 구덩이 가 많아 서 경험 을 쌓 아야 해 요 ~
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
React 및 Sass를 사용한 스마트 Navbar고정식 또는 고정식 내비게이션 바는 사용자가 웹 애플리케이션이나 웹 사이트를 탐색하기 위해 접근하기 쉬운 액세스를 제공하기 때문에 널리 사용되는 디자인 선택입니다. 그러나 특히 작은 화면에서는 공간을 차지하며 보기 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.