mui.fixed.keyboard.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. (function($, document) {
  2. $(function() {
  3. if (!$.os.ios) {
  4. return;
  5. }
  6. var CLASS_FOCUSIN = $.className('focusin');
  7. var CLASS_BAR_TAB = $.className('bar-tab');
  8. var CLASS_BAR_FOOTER = $.className('bar-footer');
  9. var CLASS_BAR_FOOTER_SECONDARY = $.className('bar-footer-secondary');
  10. var CLASS_BAR_FOOTER_SECONDARY_TAB = $.className('bar-footer-secondary-tab');
  11. // var content = document.querySelector('.' + CLASS_CONTENT);
  12. // if (content) {
  13. // document.body.insertBefore(content, document.body.firstElementChild);
  14. // }
  15. document.addEventListener('focusin', function(e) {
  16. if ($.os.plus) { //在父webview里边不fix
  17. if (window.plus) {
  18. if (plus.webview.currentWebview().children().length > 0) {
  19. return;
  20. }
  21. }
  22. }
  23. var target = e.target;
  24. //TODO 需考虑所有键盘弹起的情况
  25. if (target.tagName && (target.tagName === 'TEXTAREA' || (target.tagName === 'INPUT' && (target.type === 'text' || target.type === 'search' || target.type === 'number')))) {
  26. if (target.disabled || target.readOnly) {
  27. return;
  28. }
  29. document.body.classList.add(CLASS_FOCUSIN);
  30. var isFooter = false;
  31. for (; target && target !== document; target = target.parentNode) {
  32. var classList = target.classList;
  33. if (classList && classList.contains(CLASS_BAR_TAB) || classList.contains(CLASS_BAR_FOOTER) || classList.contains(CLASS_BAR_FOOTER_SECONDARY) || classList.contains(CLASS_BAR_FOOTER_SECONDARY_TAB)) {
  34. isFooter = true;
  35. break;
  36. }
  37. }
  38. if (isFooter) {
  39. var scrollTop = document.body.scrollHeight;
  40. var scrollLeft = document.body.scrollLeft;
  41. setTimeout(function() {
  42. window.scrollTo(scrollLeft, scrollTop);
  43. }, 20);
  44. }
  45. }
  46. });
  47. document.addEventListener('focusout', function(e) {
  48. var classList = document.body.classList;
  49. if (classList.contains(CLASS_FOCUSIN)) {
  50. classList.remove(CLASS_FOCUSIN);
  51. setTimeout(function() {
  52. window.scrollTo(document.body.scrollLeft, document.body.scrollTop);
  53. }, 20);
  54. }
  55. });
  56. });
  57. })(mui, document);