WinJS.UI.Flyout在Windows Phone 8.1上的HTML

我正尝试创建一个带有单个输入字段和单个按钮的WinJS.UI.Flyout,以允许用户在输入字段中输入一个新值并单击该按钮进行保存。 但是,在Windows Phone 8.1上,Flyouts不受支持。

我该如何解决这个问题? 有没有办法模仿手机8.1上的WinJS.UI.Flyout组件的行为?

提前致谢。


个人对这里的体系结构的看法,但我相信如果你要有一个提示的API,并且你希望人们真正使用它,你需要确保它在所有环境中都受到支持。

以下是我用于Flyouts(我用作弹出式自定义提示,不会将用户从页面导航)的用途:

default.css:

/* Used to help emulate the Flyout when on a Windows Phone device. */
.matting {
    position: absolute;
    top: 0px;
    left: 0px;
    width: 100%;
    height: 100%;
    z-index: 999;
    background-color: black;
    opacity: 0.6;
    display: none;
}

/* Applied when forcing a Flyout on a Windows Phone device. */
/* Removed when hiding it. */
/* Creates it like a WP dialog. */
.wp-flyout {
    position: absolute;
    top: 0px;
    left: 0px;
    width: 100%;
    /* The height should be left alone. */
    z-index: 1000;
    display: block;
    opacity: 1.0;
    background-color: dimgray;
}

HTML中 ,将其与WinJS.UI.Flyout div放在一起:

<div id="matting" class="matting"></div>

在Javascript中,除了主页中的readyunload函数定义之外,我还有以下两个附加功能:

    // Shows a flyout, even on Windows Phone.
    // flyoutId is the WinJS.UI.Flyout structure.
    // launchButtonId is the button that is launching this flyout.
    Flyout: function (flyoutId, launchButtonId) {
        var flyoutElement = document.getElementById(flyoutId);
        if (flyoutElement.winControl) {
            // Windows.
            var launchButton = document.getElementById(launchButtonId);
            flyoutElement.winControl.show(launchButton);
        } else {
            // Windows Phone.
            // Fake it with a dialog.
            var flyout = WinJS.Utilities.query("#" + flyoutId);
            // Show the matting.
            var matting = WinJS.Utilities.query("#matting");
            matting.setStyle("display", "block");
            // Apply click-cancel to the matting.
            matting[0].cancel = function () { that.UnFlyout(flyoutId); return true; };
            matting.listen("click", matting[0].cancel, false);
            // Apply the wp-flyout class.
            flyout.addClass("wp-flyout");
            // Add back-button-cancel event.
            WinJS.Application.addEventListener("backclick",
                matting[0].cancel);
            // Show the flyout.
            flyout.setStyle("display", "block");
        }
    },

    // Hides a flyout, even on Windows Phone.
    UnFlyout: function (flyoutId) {
        var flyoutElement = document.getElementById(flyoutId);
        if (flyoutElement.winControl) {
            // Windows.
            flyoutElement.winControl.hide();
        } else {
            // Windows Phone.
            // We're faking it with a dialog.
            var flyout = WinJS.Utilities.query("#" + flyoutId);
            // Hide the flyout.
            flyout.setStyle("display", "none");
            // Remove the wp-flyout class.
            flyout.removeClass("wp-flyout");
            // Remove the click-cancel from the matting.
            var matting = WinJS.Utilities.query("#matting");
            matting.removeEventListener("click", matting[0].cancel, false);
            // Remove back-button-cancel event.
            WinJS.Application.removeEventListener("backclick",
                matting[0].cancel);
            // Hide the matting.
            matting.setStyle("display", "none");
        }
    }

请注意 ,我使用流行的“that = this;” 在ready()函数中,用“var that;” 在主页上方定义的标准导航通用应用程序中定义。

净结果:在HTML中正常创建您的弹出窗口。 当您想要弹出窗口时,只需拨打以下电话:

that.Flyout("flyoutId", "launchButtonId");

这将在Windows中像往常一样展示弹出窗口,但在Windows Phone上,现在将弹出窗口显示为WP对话框(或足够接近它)。 如果您在弹出窗口中有Ok / Cancel / etc.按钮,请确保您致电:

that.UnFlyout("flyoutId");

代替正常的“.hide()”。

随意玩,并告诉我,如果你有任何改善。


我不认为有这样的控制......我不认为我会用手机。 查看日历应用中的日期和时间选择器,他们会带您到一个新的“页面”输入您的数据。

你想要做什么可以用标准的HTML来实现,但我只是不确定我想要它。

在这些情况下,我将我的用户带到一个新的页面,在那里他们输入所需的数据。

链接地址: http://www.djcxy.com/p/22623.html

上一篇: WinJS.UI.Flyout HTML on windows phone 8.1

下一篇: iMacros wait until page loads