jQuery Mobile:外部面板的位置/始终可见?

时间:2015-05-22 21:22:27

标签: javascript jquery html css jquery-mobile

因为我想在jQuery多页html文件的每个页面上使用相同的面板,所以我有兴趣为每个页面使用相同的代码。

这适用于外部面板。但是,我确实遇到了定位问题:据我所见,外部面板始终打开整页高度。我想要的是与jQuery mobile demo page中的面板相同的行为:

  • 始终可在大屏幕(例如桌面浏览器)上看到,
  • 始终可见,“在页面内”(例如标题下方)。

总而言之:我不想创建一个外部面板,其中包含演示页面上(内部)面板的确切行为。

我的第一个想法是在每个页面上都包含一个外部html文件,因此我至少只能编辑这个单个文件以保存它。这开始看起来很棒,但根本不起作用,因为这些元素具有相同的id(例如在面板中使用表单)。

这个问题有一个干净的解决方案吗?

2 个答案:

答案 0 :(得分:2)

JQM演示页面中的确切CSS和HTML是(见下文)。如果浏览器窗口大于60em --- 960px,则JQM演示页面会在页眉下方显示该面板,在我的演示中,我将其设置为40em

外部面板位于数据角色页面的末尾。

演示展开窗口以显示面板

https://jsfiddle.net/jag6ose3/

Html

<div data-role="page">
    <div data-role="header">
            <h1>External panels</h1>
    <a href="#" class="ui-btn ui-btn-left ui-alt-icon ui-nodisc-icon ui-corner-all ui-btn-icon-notext ui-icon-bars opanel">Opanel</a>

    </div>
    <div role="main" class="ui-content my-content">
            <h1>Content Area</h1>

    </div>
</div>
<div data-role="panel" id="my-panel" data-position="left" data-display="overlay" data-theme="a">
    <br>
    <ul data-role="listview">
        <li>The Panel</li>
        <li>option A</li>
        <li>option B</li>
        <li>option C</li>
        <li>option D</li>
    </ul>
</div>

<强>的CSS

@media (min-width: 40em) {
    #my-panel {
        visibility: visible;
        position: relative;
        left: 0;
        clip: initial;
        float: left;
        width: 25%;
        background: none;
        -webkit-transition: none !important;
        -moz-transition: none !important;
        transition: none !important;
        -webkit-transform: none !important;
        -moz-transform: none !important;
        transform: none !important;
        -webkit-box-shadow: none;
        -moz-box-shadow: none;
        box-shadow: none;
    }
    .my-content {
        width: 67%;
        padding-top: 2em;
        padding-left: 5%;
        padding-right: 3%;
        float: right;
    }
.opanel {
 visibility:hidden;   
}
}

<强>代码

$(function () {
    $("body>[data-role='panel']").panel(); //initialize the external panel

    $(document).on("click", ".opanel", function () {
        $("#my-panel").panel("open")
    });
});

答案 1 :(得分:0)

有一个更复杂的例子。面板宽度为300px,窗口小于900px,将显示图标.opanel。

&#13;
&#13;
<script id="panel-init">
    function resizeP() {
        var cw = $("body").prop("clientWidth");
        var padding2x = 32;
        if (cw > 900) {
            $(".my-content").width(cw - 300 - padding2x);
        }
        else
            $(".my-content").width(cw - padding2x);
    }
    $(function () {
        $("body>[data-role='panel']").panel(); //initialize the external panel

        $(document).on("click", ".opanel", function () {
            $("#my-panel").panel("open");
        });

    });
    $(document).ready(function () {
        resizeP();
    });
    $(window).resize(function () {
        resizeP();
    });

</script>
&#13;
<style>
    @@media screen and (min-width: 900px) {
        #my-panel {
            visibility: visible;
            position: relative;
            left: 0;
            clip: initial;
            float: left;
            width: 300px;
            background: none;
            -webkit-transition: none !important;
            -moz-transition: none !important;
            transition: none !important;
            -webkit-transform: none !important;
            -moz-transform: none !important;
            transform: none !important;
            -webkit-box-shadow: none;
            -moz-box-shadow: none;
            box-shadow: none;
        }

        .my-content {
            width: 300px;
            /*padding-top: 2em;
            padding-left: 5%;
            padding-right: 3%;*/
            float: right;
        }

        .opanel {
            visibility: hidden;
        }
    }

    .ui-content {
        padding: 16px;
    }

    .countBubl {
        float: left;
        margin-top: -30px;
        margin-left: 35px;
        background: #ed1d24;
        color: #fff;
        padding: 2px;
    }




    .ui-li-static.ui-collapsible > .ui-collapsible-heading {
        margin: 0;
    }

    .ui-li-static.ui-collapsible {
        padding: 0;
    }

        .ui-li-static.ui-collapsible > .ui-collapsible-heading > .ui-btn {
            border-top-width: 0;
        }

        .ui-li-static.ui-collapsible > .ui-collapsible-heading.ui-collapsible-heading-collapsed > .ui-btn,
        .ui-li-static.ui-collapsible > .ui-collapsible-content {
            border-bottom-width: 0;
        }
</style>
&#13;
<div data-role="page">
    <div data-role="header">
        <h1>External panels</h1>
        <a href="#" class="ui-btn ui-btn-left ui-alt-icon ui-nodisc-icon ui-corner-all ui-btn-icon-notext ui-icon-bars opanel">Opanel</a>

    </div>
    <div role="main" class="ui-content my-content">
        <h1>Content Area</h1>

        <button>dds</button>


        <p>A paragraph with a tooltip. <a href="#popupInfo" data-rel="popup" data-transition="pop" class="my-tooltip-btn ui-btn ui-alt-icon ui-nodisc-icon ui-btn-inline ui-icon-info ui-btn-icon-notext" title="Learn more">Learn more</a></p>
        <div data-role="popup" id="popupInfo" class="ui-content" data-theme="a" style="max-width:350px;">
            <p>Here is a <strong>tiny popup</strong> being used like a tooltip. The text will wrap to multiple lines as needed.</p>
        </div>



        <ul data-role="listview" data-inset="true" data-divider-theme="a">
            <li data-role="list-divider">Mail</li>
            <li><a href="#">Inbox</a></li>
            <li><a href="#">Outbox</a></li>
            <li data-role="list-divider">Contacts</li>
            <li><a href="#">Friends</a></li>
            <li><a href="#">Work</a></li>
        </ul>



        <div data-role="footer">
            <div data-role="navbar">
                <ul>
                    <li><a href="#" data-icon="grid">Summary <span class="ui-li-count ui-btn-corner-all countBubl">12</span></a></li>
                    <li><a href="#" data-icon="star" id="btn2" class="ui-btn-active">Favs</a></li>
                    <li><a href="index2.html" data-icon="gear">Setup</a></li>
                </ul>
            </div><!-- /navbar -->
        </div>

    </div>

    <div data-role="panel" id="my-panel" data-position="left" data-display="overlay" data-theme="a">
        <div data-role="collapsibleset" data-theme="a" data-inset="false">
            <div data-role="collapsible">
                <h2>Mailbox</h2>
                <ul data-role="listview">
                    <li><a href="index.html">Inbox <span class="ui-li-count">12</span></a></li>
                    <li><a href="index.html">Outbox <span class="ui-li-count">0</span></a></li>
                    <li><a href="index.html">Drafts <span class="ui-li-count">4</span></a></li>
                    <li><a href="index.html">Sent <span class="ui-li-count">328</span></a></li>
                    <li><a href="index.html">Trash <span class="ui-li-count">62</span></a></li>
                </ul>
            </div>
            <div data-role="collapsible">
                <h2>Calendar</h2>
                <ul data-role="listview" data-theme="a" data-divider-theme="b">
                    <li data-role="list-divider">Friday, October 8, 2010 <span class="ui-li-count">2</span></li>
                    <li>
                        <a href="index.html">
                            <h3>Stephen Weber</h3>
                            <p><strong>You've been invited to a meeting at Filament Group in Boston, MA</strong></p>
                            <p>Hey Stephen, if you're available at 10am tomorrow, we've got a meeting with the jQuery team.</p>
                            <p class="ui-li-aside"><strong>6:24</strong>PM</p>
                        </a>
                    </li>
                    <li>
                        <a href="index.html">
                            <h3>jQuery Team</h3>
                            <p><strong>Boston Conference Planning</strong></p>
                            <p>In preparation for the upcoming conference in Boston, we need to start gathering a list of sponsors and speakers.</p>
                            <p class="ui-li-aside"><strong>9:18</strong>AM</p>
                        </a>
                    </li>
                    <li data-role="list-divider">Thursday, October 7, 2010 <span class="ui-li-count">1</span></li>
                    <li>
                        <a href="index.html">
                            <h3>Avery Walker</h3>
                            <p><strong>Re: Dinner Tonight</strong></p>
                            <p>Sure, let's plan on meeting at Highland Kitchen at 8:00 tonight. Can't wait! </p>
                            <p class="ui-li-aside"><strong>4:48</strong>PM</p>
                        </a>
                    </li>
                    <li data-role="list-divider">Wednesday, October 6, 2010 <span class="ui-li-count">3</span></li>
                    <li>
                        <a href="index.html">
                            <h3>Amazon.com</h3>
                            <p><strong>4-for-3 Books for Kids</strong></p>
                            <p>As someone who has purchased children's books from our 4-for-3 Store, you may be interested in these featured books.</p>
                            <p class="ui-li-aside"><strong>12:47</strong>PM</p>
                        </a>
                    </li>
                </ul>
            </div>
            <div data-role="collapsible">
                <h2>Contacts</h2>
                <ul data-role="listview" data-autodividers="true" data-theme="a" data-divider-theme="b">
                    <li><a href="index.html">Adam Kinkaid</a></li>
                    <li><a href="index.html">Alex Wickerham</a></li>
                    <li><a href="index.html">Avery Johnson</a></li>
                    <li><a href="index.html">Bob Cabot</a></li>
                    <li><a href="index.html">Caleb Booth</a></li>
                    <li><a href="index.html">Christopher Adams</a></li>
                    <li><a href="index.html">Culver James</a></li>
                </ul>
            </div>
        </div>
        @*<br>
            <ul data-role="listview">
                <li>The Panel</li>
                <li>option A</li>
                <li>option B</li>
                <li>option C</li>
                <li>option D</li>
            </ul>*@

    </div>

</div>
&#13;
&#13;
&#13;