Extjs 以编程方式将Sencha Touch Ext.Panel滚动至锚定元素

Extjs 以编程方式将Sencha Touch Ext.Panel滚动至锚定元素,extjs,sencha-touch,Extjs,Sencha Touch,我有一个可滚动的面板,显示比屏幕大的内容 new Ext.Panel({ scroll: 'vertical', html: 'very larger content here with an anchor. <p id="anchor">' }); 就我所知,这对于Sencha Touch是有问题的,请注意,Touch中没有类似于其他Sencha框架的.scrollIntoView()方法。不过,可以通过与Touch集成来实现这一点,这将为您提供iScroll方法来实现这

我有一个可滚动的面板,显示比屏幕大的内容

new Ext.Panel({
  scroll: 'vertical',
  html: 'very larger content here with an anchor. <p id="anchor">'
});

就我所知,这对于Sencha Touch是有问题的,请注意,Touch中没有类似于其他Sencha框架的
.scrollIntoView()
方法。不过,可以通过与Touch集成来实现这一点,这将为您提供iScroll方法来实现这一点,并使您的滚动更加自然。这是一个如何完成的示例。

结果表明,您可以做的是

function scrollIntoView(el,cmp) {
  var dy = cmp.scroller.offset.y + el.getY() - cmp.body.getY();
  cmp.scroller.setOffset({x:0, y:-dy}, true);
}

scrollIntoView(Ext.fly('anchor'), Ext.getCmp('panel'));

这可能与
scrollIntoView()
的内部功能非常相似,但我还没有看过该代码。但是它没有动画。

您可以通过使用
滚动条
对象的
setOffset()
功能来实现这一点

例如: 您拥有原始面板:

var myPanel = new Ext.Panel({
  scroll: 'vertical',
  html: 'very larger content here with an anchor. <p id="anchor">'
});

您可以按照文档中的说明添加第三个动画参数,但我尚未测试该参数。

Nice。那就更好了。不幸的是,当你触摸面板(在动画之后)拖动它时,它会跳回到原来的位置。事实证明,这只是因为滚动条必须在内容允许的情况下进一步滚动。所以它跳回到了一个有效的位置。如果内容适当,效果很好。Cool.myPanel.scroller在sencha touch 2.4中未定义:未捕获类型错误:无法读取undefined@Edward B的属性“setOffset”。这非常有用。在Sencha 2中,该方法的第一行现在需要如下所示:cmp.getScrollable().getScroller().position.y+el.getY()-cmp.body.getY()。在Sencha 2中,有一个更好的.scrollTo方法。见:
var myPanel = new Ext.Panel({
  scroll: 'vertical',
  html: 'very larger content here with an anchor. <p id="anchor">'
});
myPanel.scroller.setOffset(0,20)