iOS使用Sencha Touch、ExtJs6 Modern或iscroll等框架时,文本框聚焦的光标不跟随页面(文本框)滚动 的解决办法

原文链接:http://blog.csdn.net/lovelyelfpop/article/details/52035229



为了弥补低端机器特别是安卓下原生滚动效果不流畅的情况,很多html5、js框架的滚动并不是原生的滚动,而是用touch事件和css3的transform样式模拟的。

在iOS下,这种非原生的滚动,会导致文本框的光标不随着页面滚动,效果如下:



解决办法:

解决思想来自github上iscroll的一个issue:https://github.com/cubiq/iscroll/issues/178

即在滚动候,触发input或者textarea元素重绘

下面是iOS下 Sencha Touch 和 ExtJS6 Modern 的解决办法:

Ext.define('Ext.overrides.form.Panel', {
    override: 'Ext.form.Panel',

    initialize: function(){
    	var me = this;
    	me.callParent(arguments);

    	if(Ext.os.is.iOS) {
	    	me.getScrollable().on({
	    		scroll: 'onScrollChange',
	    		scope: me
	    	});
    	}
    },
    onScrollChange: function(scroller, x, y) {
    	var node = document.activeElement; //当前focus的dom元素
    	if(node){
    		if (node.nodeName == "TEXTAREA" || node.nodeName == 'INPUT') { //如果是input或textarea
    			if(node.style.textShadow === '') {
		            node.style.textShadow = 'rgba(0,0,0,0) 0 0 0'; //改变某个不可见样式,触发dom重绘
		        } else {
		            node.style.textShadow = '';
		        }
    		}
    	}
    }
});

来看下解决后的效果吧:







欢迎加入Sencha Touch + Phonegap交流群

1群:194182999 (满)

2群:419834979

共同学习交流(博主QQ:479858761

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神秘_博士

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值