解决ios双击页面上移问题

做webapp时,ios有个默认双击事件,会缩放页面,并将当前点击的位置居中到屏幕,本来也没什么,但是当页面中有fixed定位的元素时,这时候你就会神奇的发现,fixed元素所见不所得了!

还有就是页面会上移...

//解决ios双击页面上移问题
//在项目中测试不紧input/button这些表单控件有这个问题,p,div等也有问题,于是乎就直接在body开刀了
(function()
{
    var agent = navigator.userAgent.toLowerCase();        //检测是否是ios
    var iLastTouch = null;                                //缓存上一次tap的时间
    if (agent.indexOf(‘iphone‘) >= 0 || agent.indexOf(‘ipad‘) >= 0)
    {
        document.body.addEventListener(‘touchend‘, function(event)
        {
            var iNow = new Date()
                .getTime();
            iLastTouch = iLastTouch || iNow + 1 /** 第一次时将iLastTouch设为当前时间+1 */ ;
            var delta = iNow - iLastTouch;
            if (delta < 500 && delta > 0)
            {
                event.preventDefault();
                return false;
            }
            iLastTouch = iNow;
        }, false);
    }

})();

//下面是国外coder给的解决方案//http://appcropolis.com/blog/howto/implementing-doubletap-on-iphones-and-ipads
(function($){
    // Determine if we on iPhone or iPad
    var isiOS = false;
    var agent = navigator.userAgent.toLowerCase();
    if(agent.indexOf(‘iphone‘) >= 0 || agent.indexOf(‘ipad‘) >= 0){
           isiOS = true;
    }

    $.fn.doubletap = function(onDoubleTapCallback, onTapCallback, delay){
        var eventName, action;
        delay = delay == null? 500 : delay;
        eventName = isiOS == true? ‘touchend‘ : ‘click‘;

        $(this).bind(eventName, function(event){
            var now = new Date().getTime();
            var lastTouch = $(this).data(‘lastTouch‘) || now + 1 /** the first time this will make delta a negative number */;
            var delta = now - lastTouch;
            clearTimeout(action);
            if(delta<500 && delta>0){
                if(onDoubleTapCallback != null && typeof onDoubleTapCallback == ‘function‘){
                    onDoubleTapCallback(event);
                }
            }else{
                $(this).data(‘lastTouch‘, now);
                action = setTimeout(function(evt){
                    if(onTapCallback != null && typeof onTapCallback == ‘function‘){
                        onTapCallback(evt);
                    }
                    clearTimeout(action);   // clear the timeout
                }, delay, [event]);
            }
            $(this).data(‘lastTouch‘, now);
        });
    };
})(Zepto);

//usage:
$(selector).doubletap(
    /** doubletap-dblclick callback */
    function(event){
        alert(‘double-tap‘);
    },
    /** touch-click callback (touch) */
    function(event){
        alert(‘single-tap‘);
    },
    /** doubletap-dblclick delay (default is 500 ms) */
    400
);
//下面是国外coder给的解决方案--end
//解决ios双击网面上移问题--end
时间: 2024-08-30 05:44:39

解决ios双击页面上移问题的相关文章

解决ios手机页面overflow scroll滑动很卡的问题

解决ios手机页面overflow scroll滑动很卡的问题 今天在IOS系统上测试 webAPPApp的时候发现使用了position:fixed/absolute时,DIV容器里面下滑动没有像普通页面一样顺畅,手滑到哪就停到哪.感觉很卡一样,而安卓效果正常,算是一个bug.终于在网上找到了一个解决方法. -webkit-overflow-scrolling:touch; 加上去后果然有用,也就是说DIV容器使用的定位属性引起的.当时效果是弹出一个层,body无滚动条,但是弹出层需要可以上下

ios 双击页面缩放 禁止

移动设备升级到iOS10了,发现了自带的Safari浏览器不再识别meta viewport了.以前我们都是用这个标签来让浏览器禁用缩放的.万恶的Apple~~ 在iOS10之前都是通过 <meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0,user-scalable=no"> 来强制不让手机浏览器缩放

终于解决ios上页面滑动拉屏的问题

看了网上很多资料,说是-webkit-overflow-scrolling: touch;这个属性引起的问题.可是这个如果没有加的话,ios上面滑动又会卡顿. 所以最后还是用了这个,一开始没有找到好的办法解决这个问题.然后想借鉴淘宝的,可是好像又看不到什么东西.所以就自己的各种尝试. 终于........把他给解决了. 因为项目是用vue写的,所以这个滑动的属性一直是加在一个公共的类上面的. 然后昨天尝试的时候,把这个东西放在body上面,结果神奇的发现,居然可以了 body, html { h

解决ios微信页面回退不刷新的问题

在回退后需要刷新的页面加以下js 1 $(function () { var isPageHide = false; window.addEventListener('pageshow', function () { if (isPageHide) { window.location.reload(); } }); window.addEventListener('pagehide', function () { isPageHide = true; }); })

解决IOS微信浏览器底部会出现向前向后返回按钮,返回不刷新的问题

<script type="text/javascript"> //解决IOS返回页面不刷新的问题 var isPageHide = false; window.addEventListener('pageshow', function() { if(isPageHide) { window.location.reload(); } }); window.addEventListener('pagehide', function() { isPageHide = true;

fastclick使用与 fastclick ios11.3相关bug原因(ios输入框点击变得不灵敏,ios input失焦后,页面上移,点击不了)

FastClick 移动设备上的浏览器默认会在用户点击屏幕大约延迟300毫秒后才会触发点击事件,这是为了检查用户是否在做双击.为了能够立即响应用户的点击事件,就有了FastClick. 安装fastclick可以使用npm,Component和Bower.另外也提供了Ruby版的gem fastclick-rails以及.NET提供了NuGet package. npm install fastclick import   FastClick   from 'fastclick'; Vue.us

聊天界面使用IQKeyboardManager导航栏及整个页面上移的解决方法

问题: 使用第三方库IQKeyboardManager时会使整个页面上移,导航栏页偏移出了显示范围.在聊天界面就会使得上面的消息看不到. 解决方法: 首先说明:在聊天界面使用IQKeyboardManager这个第三方库无法解决这个问题,至少我没找到解决办法.网上说的那些用ib创建UI,把控制器的view改成scrollview,或纯代码创建UI,重写loadView方法,然后把self.view = scrollview的解决方法会把布局搞乱.没有试,太麻烦.解决思路:在聊天页面禁用IQKey

移动端上传照片 预览+draw on Canvas demo(解决iOS等设备照片旋转90度的bug)

背景: 本人的一个移动端H5项目,需求如下: 手机相册选取或拍摄照片后在页面上预览 然后绘制在canvas画布上. 这里,我们先看一个demo(http://jsfiddle.net/q3011893/83qfqpk8/embedded/) 操作步骤: 1.点击选择文件,拍摄一张照片,此时"预览:"文字下会显示你刚才拍摄的照片: 2.再点击"draw on Canvas",该按钮下的画布会绘制你刚才拍摄的照片. 正常的结果: 正文: 让input file支持拍照+

解决ios、微信移动端的position: fixed; 支持性不好的问题 &amp;&amp; 禁用下拉暴露黑底的功能

解决ios.微信移动端的position: fixed; 支持性不好的问题 在chrome中的多个部分使用了position: fixed之后,都可以正常的布局,但是放在微信上却出现了不能正常显示的问题(第一个问题). 并且使用了postion: fixed; 的一个种类名称栏在微信下下滑不了,而body是可以的,确实让人很郁闷(第二个问题). 对于第二个问题,我们可以采取的方式是使得微信不能下滑暴露出 powered by ... 的字样. 但是对于第一个问题,确实没有很好的解决方法. 所以就