【问题标题】:jquery mobile How to stop auto scroll to focused input in Mobile web browserjquery mobile 如何停止自动滚动到移动网络浏览器中的焦点输入
【发布时间】:2018-05-27 18:22:31
【问题描述】:

在移动设备中,当我打开我的页面并选择一个输入框时,虚拟键盘打开,页面自动滚动以将输入框置于中心。

我不想要这个动作。 我搜索了很多答案,其中大多数建议在调整大小事件中手动调用以下 javascript 代码。

window.scrollTo(0,0)

但是当我尝试时,它使页面抽动,就像页面向下滚动,然后很快又回来了。

有什么好的解决办法吗? 谢谢。

【问题讨论】:

    标签: mobile-website


    【解决方案1】:

    好的。

    现在您知道如何通过以下答案检测虚拟键盘打开事件: jquery mobile how to detect if mobile virtual keyboard is opened

    对于粗略的方法,您可以在处理程序中添加以下代码:

    setTimeout(function(){
        window.scrollTo(0,0);
    }, 100);
    

    但这确实让页面闪烁,而且不是一个流畅的解决方案。

    您需要知道的是,移动设备会尝试检测活动输入元素的位置,如果它即将被键盘隐藏,则只需向下滚动整个页面,使其完全显示。

    所以这是一个狡猾的方法:你只是欺骗移动设备认为该元素现在处于非常顶部的位置,并且这个技巧将在 iOSAndroid 中以不同的方式完成强>.

    iOS

    以下代码非常适合 iOS:

    $(document).on('touchstart', 'textarea, input[type=text], input[type=date], input[type=password], input[type=email], input[type=number]', function(e){
    
                var intv = 100;
                var $obj = $(this);
    
                if (getMobileOperatingSystem() == 'ios') {
    
                    e.preventDefault();
                    e.stopPropagation();
    
                    $obj.css({'transform': 'TranslateY(-10000px)'}).focus();
                    setTimeout(function(){$obj.css({'transform': 'none'});}, intv);
                }
                return true;
            });
    

    安卓

    在虚拟键盘打开事件处理程序中,隐藏活动输入元素上方的一些元素,让移动设备认为活动输入元素在最上面,然后在几秒钟后,再次显示隐藏的东西。

    所以在下面的示例代码中,$wrap 是页面的全部内容,$wrap.find('.content') 是活动输入框上方的元素,所以只需将其隐藏以欺骗移动设备,然后稍后再显示。

    function onKeyboardOnOff(isOpen) {
        // Write down your handling code
        if (isOpen) {
            // keyboard is open
            $wrap.css({opacity: 0})
               .find('.content').hide(); // trick the browser thinks the element is relatively top position... 
            setTimeout(function(){
                $wrap.css({opacity: 1})
                     .find('.content').show();
            }, 10);
        }
    }
    

    嗯,到目前为止,这些都是工作代码,但不能保证新版本的移动设备操作系统。 :-)

    老实说,我真的希望移动网络浏览器支持一些钩子和函数来处理这种令人头疼的问题。

    【讨论】:

    • 虽然它工作得很好,但它有一个不工作的情况。你能检查一下这个案子并帮助我如何处理这个案子吗:stackoverflow.com/questions/47854231/…
    • 我并没有真正在我的项目中使用 jquery,并且添加该 jquery 代码并在 IOS 上运行它并没有真正起作用。也许这与我没有在我的项目中使用 touchstart 有关?我使用 javascript 的 focus() 将它放在下一个输入块上。这是我的问题的视频youtu.be/UmHJVxqrLS8
    猜你喜欢
    • 2012-09-11
    • 2013-09-01
    • 1970-01-01
    • 2017-05-12
    • 1970-01-01
    • 1970-01-01
    • 2018-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多