移动端,由页面定位的滚动区域引起光标可以跟页面滑动

var isIPHONE = navigator.userAgent.toUpperCase().indexOf(‘IPHONE‘)!= -1;

// 元素失去焦点隐藏iphone的软键盘

function objBlur(obj,time){
    var that;
//  if(typeof id != ‘string‘) throw new Error(‘objBlur()参数错误‘);
        time = time || 100,
        docTouchend = function(event){
                if(event.target!= obj){
                    setTimeout(function(){
                        if (typeof($(event.target).attr("readonly"))!=="undefined") {
                            obj[that].blur();
                            document.removeEventListener(‘touchend‘, docTouchend,false);
                            return false;
                        }
                    },time);
                }
        };
        if(obj){
            for (var i = 0; i<obj.length; i++) {
                obj[i].index = i;
                obj[i].addEventListener(‘focus‘, function(){
                    that = this.index;
                    document.addEventListener(‘touchend‘, docTouchend,false);
                },false);
            }
        }else{
            throw new Error(‘objBlur()没有找到元素‘);
        }
}

调用:

$(function () {
    if(isIPHONE){
        var obj = document.getElementsByTagName(‘input‘);
        //var objTextarea = document.getElementsByTagName(‘textarea‘);
        var input = new objBlur(obj);
        //var textarea = new objBlur(objTextarea);
        input=null;
        //textarea = null;
    }
})

说明:焦点在某个input元素上,此时快速滑动页面,由于是absolute定位,光标跟不上滚动的速度。导致错位问题。

解决方案就是在你滑动页面的时候直接让input失去焦点,隐藏光标。这里对测试人员吐槽一下:尼玛,好好的表单你不填,你非要滑动页面玩,XX。。。

不过话说回来,要不是测试员奇葩,我也不会学到更多东西,嘻嘻!还是非常感谢的!Bugs,come on!!     测试→

时间: 2024-12-14 19:32:00

移动端,由页面定位的滚动区域引起光标可以跟页面滑动的相关文章

页面定位导航滚动插件

今天做页面定位导航时踩到一坑,由于页面顶部有一个fixed的导航条,所以用直接用锚点效果不好.所以打算用js来实现,顺便还有滚动的效果.昨晚做的时候想的是直接把tag设定为固定的值,但是睡觉前在平板上查看网页的时候发现,响应式布局,放到平板上top值就变了.所以今天起床又开始鼓捣这只小虫. 使用了jquery,然后滚动函数中使用jq来设定值,本来打算找到id后用 offset().top 加减一个差值就可以定位到我想要的位置.但是,在不同浏览器中obj.offset().top的值不一样,并且,

使用原生js的scrollTop,刷新进入页面定位到某一个dom元素

原生js的scrollTop即可,与jquery方法的区别是jquery做了兼容封装.我想要实现的功能是时间定位,根据当前时间定位到滚动区的时间位置.页面为移动端页面,上下固定位置,中部为1小时4格的选择区域,从0点到24点. 开始我想发出现了偏差,总想定位到某个dom,这样使得scrollTop一直是0,怎么设置都不行,后来仔细分析才发现要设置在超出当前可视区域的dom上才可以. 所以设置在外层overflow-x:scroll;的dom上即可,根据时间匹配dom位置,根据索引及每格的高度计算

解决iScroll横向滚动区域无法拉动页面的问题

近期项目中使用iScroll遇到一个问题,在设定wrapper为横向滚动时,如果你手指放在该区域,将无法拉动页面,也就是说该区域取消了默认事件.这个体验是实在是无法接受,特别是页面中有多个横向滚动区域时,很容易触碰到这种区域,这时用户将觉得页面很卡. Google搜了一下,看来很多人都为这个问题而烦恼.有高人给出了解决方案,在 这里 可以找到. 代码如下: myScroll = new iScroll('scrollpanel', { // other options go here... vS

scroll 滚动到指定位置触发事件 and 点击一按钮/链接让页面定位在指定的位置

scroll 滚动到指定位置触发事件:$(function(){ $(window).scroll(function() { var s =$(window).scrollTop(); if (s>=782) {//782是导航条离页面顶部的距离(px) $('.nav').addClass('fixednav'); } else{ $('.nav').removeClass('fixednav'); } });}); .fixednav{ position:fixed; top:0px; le

移动web页面支持弹性滚动的3个方案

有段时间一直折腾移动端页面弹性滚动的各种问题,做了点研究,今天做个小分享~ 传统 pc 端中,子容器高度超出父容器高度,通常使用 overflow:auto 可出现滚动条拖动显示溢出的内容,而移动web开发中,由于浏览器厂商的系统不同.版本不同,导致有部分机型不支持对弹性滚动,从而在开发中制造了所谓的 BUG. 上图如果在PC端中,我们可以利用 position:fixed 和 overflow:auto 进行简单的布局实现我们需要的效果,而在手机端遇到的问题如下: ios4 和 android

iScroll滚动区域中select、input、textarea元素无法点击的Bug修复

最近在一个项目中使用了iScroll4模拟滚动效果,调试过程中发现一个表单页中的所有表单项都无法点击聚焦, 如<select>.<input>.<textarea>.这是因为iScroll要监听整个页面事件,为了达到 最优效果,它默认禁用了所有元素的默认事件(但也有例外,如<a>默认事件不受影响),所以才造成这些表单元素点击没有反应,无法正常聚焦. 我们打开 iscroll.js ,找到这一行: onBeforeScrollStart : function(

ajax 页面请求后,jsp页面定位

如下图所示.A,B两区域为不动区域,既不随着滚动条的滚动而移动.C区域为异步加载内容区域, 在C区域中,点击查询按钮,需要异步加载查询 结果.但是查询结果会很长,这样子,就需要向下滑动滚动条,用户体验不是很好.所以决定点击查询按钮后,页面自动的向下滚动.所以使用了scrollTop 这个方法 具体代码只有一行就搞定了! 我的这个滚动条是body级别的!所以使用如下: $("body").scrollTop(450); 如果是div级别的滚动条,获取div对象.scrollTop(&qu

跳转页面定位到指定的位置(转)

跳转页面定位到指定的位置 明天要回家了,今天也没啥事做.就分享下做过的一个小需求,还有很多朋友问过我类似的问题,当时也是跟他们说说简单的思路,并没有分享.今天我就整理下吧. 需求是这样的A页面有的链接,跳转到B页面中.并且要根据A页面的链接不同定位的不同的内容区域.我贴个图你大概就理解了: A页面 B页面 当我点击A页面中3的链接的时候,就要跳转到B页面,并且定位到活动三内容区域: 这个都是一个简单的活动页面,当然你也可以很简单的实现,把B页面拆分成3个页面,分别对应A页面的3个不容的内容,但是

IE7局部滚动区域下绝对定位或相对定位元素不随滚动条滚动的bug

尽管在项目中测试人员已经慢慢淡化了IE6的测试,但是IE7依然还是要纳入测试范围. 最近碰到一个IE7的蛋疼bug,在页面上设置了一个局部的滚动区域,在拖动滚动条的时候,滚动区域内设置了相对定位或绝对定位的元素不随滚动条移动位置. 蛋碎了一地... 在网上查了下看看大家都是怎么破这个问题的,发现这个问题居然也是个普遍问题,好吧. 解决方法: 如果 .scrollerArea{} 是滚动区域 那么,在样式里面加上ie7的hack .scrollerArea{*position:relative;*