如何在Metro风格应用中实现滑动页面转换

时间:2012-09-18 11:03:43

标签: javascript html5 windows-8 microsoft-metro

我想在Metro Style App中使用幻灯片样式实现页面转换。

效果看起来像

    state 1                     state 2                   state 3
 ____________              _______________             ____________  
|            |            |       |       |           |            |
|   page A   |    ====>   |page A |page B |   ====>   |   page B   |
|            |            |partial|partial|           |            |
|____________|            |_______|_______|           |____________|

它将通过平移手势从右向左滑动(没有触发系统工具栏,我不知道如何隔离它们)来触发。

我玩了exitPage/enterPage,但没有运气:在B页进入之前,页面A似乎消失了。
我还阅读了single page navigationcode sample of fragment loadingcode sample of scrolling/panning,并考虑将当前页面和新页面放在div包装器中并在div中滑动它们不调用{{1 }}。但这可能会打破CSS的位置,我不知道什么时候可以安全地调用新页面的JS ......

更新1 或许FlipView可以做到这一点吗?

更新2 找到将本地页面加载到navigate()的方法,找到了有用的链接,但仍然困惑......

update 3 通过完全定义FlipView个页面并在FlipView.itemTemplate中呈现FlipView之一来计算PageControl用法的原始版本那个合适吗?

那么,任何合适的解决方案或明智的想法?谢谢!

2 个答案:

答案 0 :(得分:2)

你绝对可以使用FlipView,但我会说实话,我不知道它在HTML方面是如何工作的。在Xaml方面,您将实现“页面”作为用户控件而不是实际页面,然后您将它们托管在FlipView中。如果你有很多“页面”和与这些“页面”相关的数据,这可能会占用大量资源。

在Xaml端,每个真实页面(继承自Page)显示在Frame中。框架一次只能显示一页。这就是为什么你看到第一页在动画完成之前就消失了。

如果您不希望用户能够浏览多个虚拟页面,或者资源过于密集,您可能不想使用FlipView。相反,您可以使用两个ContentPresenters并拥有动画。 ContentPresenterA和ContentPresenterB是并排的。动画幻灯片,最后它将ContentPresenterA设置为ContentPresenterB的内容并快速回到动画的开头。它应该很快发生,用户不会注意到跳跃。

我打算让我的同事和朋友Ryan Joy跳到这里,看看他是否可以谈论如何在HTML方面做这些事情。

答案 1 :(得分:0)

我已经使用了FlipViewWinJS.UIbase.js内的代码解释了有关效果的所有内容(如Dominic Hopton所述)。 FlipView足以满足我目前的使用需求(可能需要针对未来的额外翻转行为进行自定义)。

FlipView在开始时一次加载所有页面,以减少过载,我

  1. 首先是lazy-load简单占位符div而不是PageControl,然后在PageControl的事件onpagecompleted/onpagechangedvisibility中加载/卸载FlipView。这会带来一个副作用,即当页面在视口内部(或隐藏)时可以触发PageControl.ready/unload,非常方便。
  2. 通过itemDataSource逐步加载额外页面(也可以动态卸载?)
  3. 另外,在FlipView包裹的PageControl内可以使用额外的FlipView,MSDN没有提到这一点。