javascript - WinJs 中的 View 状态更改事件在哪里?

标签 javascript windows-8 winjs

在 Windows 8 中,当 View 状态从对齐变为填充再变为全屏时;

我如何捕捉这些事件并使用 WinJs 响应它们?

最佳答案

参见 this关于如何捕捉 View 状态变化的博文。基本上,建议归结为捕获调整大小事件,然后像这样检查 View 状态:

 window.addEventListener("resize", onResize);


function onResize() { 
    // Update view for the new window size 
    updateView(); 
} 

function updateView() { 
    // Query for the current view state 
    var myViewState = Windows.UI.ViewManagement.ApplicationView.value; 

    var viewStates = Windows.UI.ViewManagement.ApplicationViewState; 
    var statusText; 

    // Assign text according to view state 
    switch (myViewState) { 
        case viewStates.snapped: 
            statusText = "This app is snapped!"; 
            break; 
        case viewStates.filled: 
            statusText = "This app is in filled state!"; 
            break; 
        case viewStates.fullScreenLandscape: 
            statusText = "This app is full screen landscape!"; 
            break; 
        case viewStates.fullScreenPortrait: 
            statusText = "This app is full screen portrait!"; 
            break; 
        default: 
            statusText = "Error: Invalid view state returned."; 
            break; 
    }

如果您查看适用于 Windows 8 的 Microsoft Visual Studio Express 2012 RC template for Javascript你会在 navigator.js 中看到这样的东西:

window.onresize = this._resized.bind(this);

_resized: function(args) {
    if (this.pageControl && this.pageControl.updateLayout) {
        this.pageControl.updateLayout.call(this.pageControl, this.pageElement, appView.value, this.lastViewstate);
    }
    this.lastViewstate = appView.value;
},

//*page*.js

updateLayout: function (element, viewState, lastViewState) {
     /// <param name="element" domElement="true" />
     var listView = element.querySelector(".itemslist").winControl;
     if (lastViewState !== viewState) {
          if (lastViewState === appViewState.snapped || viewState === appViewState.snapped) {
               var handler = function (e) {
               listView.removeEventListener("contentanimating", handler, false);
               e.preventDefault();
          }
          listView.addEventListener("contentanimating", handler, false);
          var firstVisible = listView.indexOfFirstVisible;
          this._initializeLayout(listView, viewState);
          if (firstVisible >= 0 && listView.itemDataSource.list.length > 0) {
                listView.indexOfFirstVisible = firstVisible;
           }
       }
   }
},

_initializeLayout: function (listView, viewState) {

    if (viewState === appViewState.snapped) {
        listView.layout = new ui.ListLayout();
    } else {
        listView.layout = new ui.GridLayout();
    }
},

根据 this当 View 状态更改影响 CSS 属性或 CSS 中指定的布局时,您还可以在 msdn page 中使用媒体查询。对于所有其他更改,应使用 onResize。

关于javascript - WinJs 中的 View 状态更改事件在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12274197/

相关文章:

windows-8 - WinRT/Win8 中的 MediaElement 根本不起作用

javascript - 如何在 WinJS iframe 中加载远程内容同时避免 SEC7117 错误?

javascript - 无法生成 linkedIn 的访问 token

javascript - 如何在同一页面上以html形式操作php函数?

xaml - 如何以编程方式在 Windows 8 中将切换开关状态设置为打开或关闭?

c++ - Windows::Storage::ApplicationData::Current 在 C++ 中找不到

windows-8 - 如何在WinJS中绑定(bind)到 "self"

html - WinJS List GridLayout 标题在列表上方

javascript - React切换监听html的其他节点

javascript - 如何检查 JSON 对象参数是否存在?