0

我有一个<ul>with data-role="listview" 属性。对于<li>元素,我希望在 中包含一个<div><li>覆盖 中的主要内容<li>,当一个人向右滑动时,<div>动画向右滑动,显示 div 下方的内容。

我的问题是,当我将 div 添加到<li>元素时,我无法<div>覆盖<li>元素。即使我设置了样式style: height=100%,div 似乎也只占用了大约 2/3 的<li>元素空间。

4

1 回答 1

3

您可以将 DIV 元素添加到列表项,如下所示:

HTML --

    <ul data-role="listview">
        <li data-icon="grid"><a href="#">This is normal content.</a><div class="cover-div">Swipe to Uncover</div></li>
        <li data-icon="grid"><a href="#">This is normal content.</a><div class="cover-div">Swipe to Uncover</div></li>
        <li data-icon="grid"><a href="#">This is normal content.</a><div class="cover-div">Swipe to Uncover</div></li>
        <li data-icon="grid"><a href="#">This is normal content.</a><div class="cover-div">Swipe to Uncover</div></li>
        <li data-icon="grid"><a href="#">This is normal content.</a><div class="cover-div">Swipe to Uncover</div></li>
    </ul>

这会在 jQuery Mobile 初始化列表视图后创建以下输出:

<li data-icon="grid" data-corners="false" data-shadow="false" data-iconshadow="true" data-wrapperels="div" data-iconpos="right" data-theme="c" class="ui-btn ui-btn-icon-right ui-li-has-arrow ui-li ui-btn-up-c">
    <div class="ui-btn-inner ui-li">
        <div class="ui-btn-text">
            <a href="#" class="ui-link-inherit">This is normal content.</a>
            <div class="cover-div">Swipe to Uncover</div>
        </div>
        <span class="ui-icon ui-icon-grid ui-icon-shadow">&nbsp;</span>
    </div>
</li>

然后你可以为元素添加定位和背景样式:

CSS——

.cover-div {
    position   : absolute;
    top        : 0;
    left       : 0;
    width      : 100%;
    height     : 100%;
    z-index    : 2;
    background : #000;
    background : rgba(0, 0, 0, 0.7);
    color      : #fff;
}​

最后,您可以检测“封面”DIV 上的滑动事件并在屏幕外为元素设置动画:

JS——

//when a page is initialized by jQuery Mobile, we'll do our own initialization
$(document).delegate('[data-role="page"]', 'pageinit', function () {

    //find all the `.cover-div` elements on this page and bind to swipe left/right events for the elements
    $(this).find('.cover-div').bind('swipeleft swiperight', function (event) {

        //if the user swiped to the left then animate the DIV to the left
        if (event.type == 'swipeleft') {
            $(this).stop().animate({ left : '-100%' }, 250);

        //otherwise animate the DIV to the right
        } else {
            $(this).stop().animate({ left : '100%' }, 250);
        }
    });
});
​

这是一个演示:http: //jsfiddle.net/pmqDf/1/

于 2012-04-24T21:39:16.250 回答