在我的移动 Safari 项目中,我需要创建一个消息发布功能。当文本行超过文本区域的最大行数时,需要在文本区域内滚动。我在 Ext.field.textarea 中找不到“可滚动”属性,知道怎么做吗?干杯!
问问题
3995 次
2 回答
3
touch 2.0.x 中存在一个错误,因此框架显式地阻止了滚动操作。据说修复将在 2.1 中,虽然我没有正式看到,只是来自论坛上的一个人。
在那之前,这里有一种 touch1 解决方案http://www.sencha.com/forum/showthread.php?180207-TextArea-scroll-on-iOS-not-working可以移植到 V2。它基本上涉及向实际的 textarea 字段(不是 sencha 对象)添加一个事件侦听器,然后如果它是一个有效的滚动事件,则调用 preventdefault。
完整的代码在那个链接上,但重要的部分在这里。
直接获取 <textarea> 字段(不是 Sencha Touch 对象)并使用 addListener 在 touchstart 上应用“handleTouch”,在 touchmove 上应用“handleMove”
handleTouch: function(e) {
this.lastY = e.pageY;
},
handleMove: function(e) {
var textArea = e.target;
var top = textArea.scrollTop <= 0;
var bottom = textArea.scrollTop + textArea.clientHeight >= textArea.scrollHeight;
var up = e.pageY > this.lastY;
var down = e.pageY < this.lastY;
this.lastY = e.pageY;
// default (mobile safari) action when dragging past the top or bottom of a scrollable
// textarea is to scroll the containing div, so prevent that.
if((top && up) || (bottom && down)) {
e.preventDefault();
e.stopPropagation(); // this tops scroll going to parent
}
// Sencha disables textarea scrolling on iOS by default,
// so stop propagating the event to delegate to iOS.
if(!(top && bottom)) {
e.stopPropagation(); // this tops scroll going to parent
}
}
于 2012-07-25T22:38:26.713 回答
0
Ext.define('Aspen.util.TextArea', {
override: 'Ext.form.TextArea',
adjustHeight: Ext.Function.createBuffered(function (textarea) {
var textAreaEl = textarea.getComponent().input;
if (textAreaEl) {
textAreaEl.dom.style.height = 'auto';
textAreaEl.dom.style.height = textAreaEl.dom.scrollHeight + "px";
}
}, 200, this),
constructor: function () {
this.callParent(arguments);
this.on({
scope: this,
keyup: function (textarea) {
textarea.adjustHeight(textarea);
},
change: function (textarea, newValue) {
textarea.adjustHeight(textarea);
}
});
}
});
于 2015-02-25T11:16:11.350 回答