【问题标题】:JQuery Mobile Listview Swipe MenuJQuery Mobile Listview 滑动菜单
【发布时间】:2014-11-26 14:31:39
【问题描述】:

我有一个带有自动生成分隔符的 ListView 的标准 JQM 页面。

我希望能够添加一些功能,以允许用户在列表视图中的项目上向左或向右滑动,并完成以下任一操作;

1) 显示一个星形图标并在本地存储中创建一些信息。再次滑动时,将图标更改为“空心”星形并删除 localstorage 中的值

2) 显示一个“空心”星形图标,单击该图标会在 locastorage 中创建一个值,并且该图标会替换为“实心”星形。同样,如果第二次按下星形,则本地存储值将被删除,并且图标恢复为“空心”星形

我确定我在其他地方看到过类似主题的信息,但今天似乎找不到。因此,任何指针、提示、链接将不胜感激。

谢谢。

【问题讨论】:

  • 是的,但是我刚刚从您的 codepen 添加了 css 和 js,它对我不起作用。我无法使滑动动作起作用,并且 FireBug 控制台中没有显示任何错误。我不明白为什么,虽然我希望只是错过了一些非常简单的东西。
  • 你的列表视图是inset还是不是?
  • 我正在使用 Adob​​e 的括号编辑器,它添加了自己的挂钩来启用实时预览模式。让我编译应用程序,看看它在不带括号的情况下运行是否有效。
  • 演示不是 100% 功能的,它只是一个实验。我现在正在努力。

标签: javascript jquery listview jquery-mobile


【解决方案1】:

创建将包含 starspan 元素。在每个 li 元素之前添加跨度。

<ul data-role="listview" id="list">
  <span class="yellowStar"></span>
  <li>Item 1</li>
  <span class="hollowStar"></span>
  <li>Item 2</li>
  <span class="hollowStar"></span>
  <li>Item 3</li>
  <span class="hollowStar"></span>
  <li>Item 4</li>
  <span class="hollowStar"></span>
  <li>Item 5</li>
</ul>

filledhollow 星星应用以下 CSS。

.ui-listview>.ui-li-static {
  overflow: initial; /* to hide spans underneath */
  -webkit-transition: -webkit-transform 300ms ease; /* transition effect */
     -moz-transition: -moz-transform 300ms ease;
       -o-transition: -o-transform 300ms ease;
          transition: transform 300ms ease;
}

ul span {
  float: right;
  padding: 1.3em 20px;
  z-index: -1;
}

ul .yellowStar {
  background-image: url(filled.png);
  background-repeat: no-repeat;
  background-position: center;
}

ul .hollowStar {
  background-image: url(hollow.jpg);
  background-repeat: no-repeat;
  background-position: center;
}

然后附上swipeleft来揭星。

$(document).on("click", "ul span", function () {
    $(this).toggleClass("yellowStar hollowStar");
}).on("swipeleft", "ul li", function (e) {
    $(this).off("click");
    $(this).css({
        transform: "translateX(-40px)"
    }).one("transitionend webkitTransitionEnd oTransitionEnd otransitionend MSTransitionEnd", function () {
        $(this).one("click swiperight", function () {
            $(this).css({
                transform: "translateX(0)"
            });
        });
    });
});

每当swipe 被触发时,它也会触发click,因此,.off("click")swipe 触发时是必不可少的。但是,一旦过渡结束,clickswiperight 侦听器将附加到关闭/隐藏星号。

Demo

【讨论】:

  • 我目前遇到了一些问题:1) 我的星星是可见的,但只有在我向左滑动以正式显示它们时才能点击。他们显然需要从一开始就隐藏起来。 2) 在允许我通过滑动打开任何其他列表项之前,必须先从“li”中删除焦点。因此,例如,我需要单击其中一个显示的星星,滚动页面或右键单击任意位置,然后按 Escape 取消鼠标菜单。 3) 我的 listview 项目使用 onclick 事件,因为它们链接到其他页面。这似乎阻止了我“揭露”星星,尽管这并不重要
  • @PhillHealey 在哪个浏览器中测试过?列表项是否像我的演示一样可单击或只读?我没有得到 #2。
  • li 中的所有内容都包含在一个带有空 href 值和一个 'onclick=' 属性的 'a' 标记中,该属性调用 $.mobile.changePage 加载下一页的函数。跨度>
  • 好的,我会检查代码。快来聊天chat.stackoverflow.com/rooms/65708/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-24
  • 1970-01-01
  • 2013-05-21
  • 1970-01-01
  • 1970-01-01
  • 2020-03-28
相关资源
最近更新 更多