试图阻止 jQuery Mobile 滑动手势冒泡,但它不起作用

2024-02-28

我正在使用 jQuery Mobile 并创建了一些类似于 Android Holo Tabs 的东西:

http://note.io/18RNMRk http://note.io/18RNMRk

为了使滑动手势能够在选项卡之间切换,这是我添加的代码:

$("#myPage #pageTabs").on('swipeleft swiperight', function(e){
    e.stopPropagation();
    e.preventDefault();
});
$("#myPage").on('swipeleft', function(){
    ui.activities.swipe(1);
}).on('swiperight', function(){
    ui.activities.swipe(-1);
});

选项卡的 HTML 类似于:

<div id="pageTabs">
    <div class="tab">
        <a href="#" data-dayOfMonth="26">Thu</a>
    </div>
    <div class="tab">
        <a href="#" data-dayOfMonth="27">Fri</a>
    </div>
    <div class="tab">
        <a href="#" data-dayOfMonth="28" data-meridian="am">Sat AM</a>
    </div>
    <div class="tab">
        <a href="#" data-dayOfMonth="28" data-meridian="pm">Sat PM</a>
    </div>
    <div class="tab">
        <a href="#" data-dayOfMonth="29">Sun</a>
    </div>
</div>

我正在监听页面级别的滑动手势,因为div[data-role=content]如果没有足够的内容,有时可能无法垂直填满屏幕。如果我在这个 div 上监听并且它没有覆盖屏幕,并且您滑动到底部附近,则该事件不会在此 div 上触发,它将在根页面上(div[data-role=page]).

这是 Firefox 对该页面的 3D 渲染,以证明上述断言。我已经注释了div[data-role=content]:

http://note.io/18RPhyK http://note.io/18RPhyK

出于这个原因,我在页面级别监听它;但由于选项卡的数量可以滚动出视口(如上所示:周日在屏幕右侧),我希望用户也能够水平滚动。我已经让水平滚动工作了(这只是一些简单的 CSS),但问题是,即使我的e.stopPropagation()如上所示,滑动手势向上冒泡到页面元素,而我的滑动手势阻止了在添加滑动手势之前可用的平滑滚动。

我是否误解了事件冒泡的工作原理,或者在这种情况下如何阻止它?


我找到了解决方法,但实际的解决方案会更好。

由于问题是我没有满足这两个要求的容器:

  1. 包含页面内容,但不包含选项卡
  2. 使用 min-height 始终垂直填满屏幕

我决定添加一个包装器:

<div id="pageTabs">
    <div class="tab">
        <a href="#" data-dayOfMonth="26">Thu</a>
    </div>
    <div class="tab">
        <a href="#" data-dayOfMonth="27">Fri</a>
    </div>
    <div class="tab">
        <a href="#" data-dayOfMonth="28" data-meridian="am">Sat AM</a>
    </div>
    <div class="tab">
        <a href="#" data-dayOfMonth="28" data-meridian="pm">Sat PM</a>
    </div>
    <div class="tab">
        <a href="#" data-dayOfMonth="29">Sun</a>
    </div>
</div>
<div class="contentWrapper">
    <!-- ... -->
</div>

我已将滑动手势附件移至此新包装器,并从选项卡栏中删除了滑动侦听器:

$(".contentWrapper").on('swipeleft', function(){
    ui.activities.swipe(1);
}).on('swiperight', function(){
    ui.activities.swipe(-1);
});

为了确保它始终填充屏幕,每次加载页面时,我将其最小高度设置为计算出的视口高度减去包装器的顶部偏移量:

$("#myPage").on('pageshow', function(){

    var viewPortHeight = document.documentElement.clientHeight;
    var offset = $(".contentWrapper", this)[0].offsetTop;

    $(".contentWrapper", this).css({'min-height': viewPortHeight - offset + 'px', 'display': 'block'});
});

这正是我想要的。我可以在页面内容上滑动来切换选项卡,并且可以水平滚动选项卡而无需激活滑动手势。

对于任何有兴趣实现相同效果的人,这是我的 LESSCSS:

#pageTabs {
    @tab-highlight: @lightblue;

    margin: -15px -15px 15px -15px;
    padding: 0;
    height: 38px;
    overflow-x: scroll;
    overflow-y: hidden;
    white-space: nowrap;
    border-bottom: 2px solid @tab-highlight;

    .tab {
        display: inline-block;
        vertical-align: top;
        border-left: 1px solid @tab-highlight;
        margin-left: -5px;
        height: 100%;

        &:first-child {
            margin-left: 0;
        }
        &.active {
            height: 32px;
            border-bottom: 8px solid @tab-highlight;
        }
        a {
            padding: 12px 20px 0px 20px;
            display: block;
            height: 100%;
            text-decoration: none;
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

试图阻止 jQuery Mobile 滑动手势冒泡,但它不起作用 的相关文章

随机推荐

  • 实现简单 FSM 的 Pythonic 方法是什么?

    昨天我必须解析一个非常简单的二进制数据文件 规则是 在一行中查找两个都是 0xAA 的字节 然后下一个字节将是一个长度字节 然后跳过 9 个字节并输出给定 数量的数据那里 重复到文件末尾 我的解决方案确实有效 并且很快就组合在一起了 尽管我
  • 将 JLabel 移动到其他 JLabel - GUI

    我正在尝试使 JLabel 跨其他 JLabel 移动 目前只有 1 个计时器在工作 它的运行方式应该像火车穿过铁轨一样 绕着铁轨一路行驶 最终回到起点 我不知道如何让它一路顺利 任何帮助都是值得赞赏的 谢谢 import java awt
  • 如何从节点脚本运行 gulp 任务

    我有一个节点脚本 我想运行同一脚本中的 gulp 任务 我该如何调用它 usr bin env node var gulp require gulp gulp task default function arg How do I call
  • 在 C++ 中,当子类化时,为什么有时需要为重写函数添加 virtual 关键字?

    为什么我有时会在 C 示例中看到在谈论子类 继承时 基类有 virtual 关键字 有时重写的函数也有 virtual 关键字 为什么有时需要向子类添加 virtual 关键字 例如 class Base Base virtual void
  • Javascript 与 PHP 一起运行后获取 URL 的内容(文本)

    是否可以使用 PHP 获取 URL 的内容 使用某种函数 例如file get contents or header 但只有在执行一些 JavaScript 代码之后 Example mysite com 有一个脚本可以实现loadUrlA
  • Response.Flush() 抛出 System.Web.HttpException

    我有一个 HttpHandler 用于处理客户端网站上的某些图像 当我将图像流输出到响应对象并调用 Flush 时 偶尔会引发错误 这是一个代码块 var image Image FromStream memStream if size g
  • 如何从嵌入式 JAR 文件加载资源

    我正在尝试加载嵌入 JAR 文件中包含的资源 该项目实际部署在JBoss http en wikipedia org wiki JBoss使用一个EAR http en wikipedia org wiki EAR 28file forma
  • 在 JSON FabricJS 中包含图像数据

    我正在尝试使用 FabricJS 画布 并且想将画布导出为 JSON 我尝试使用两者加载图像new fabric Image and fabric Image fromURL他们俩都很好用 现在我想从画布获取 JSON 但我想要 2 种 J
  • 如何将 pytest-aiohttp 装置与范围会话一起使用

    我正在尝试为 aiohttp 应用程序编写测试 我正在使用 pytest aiohttp 插件 我的目的是在第一次测试执行之前初始化并运行应用程序一次 并在所有测试完成后拆除 pytest aiohttp 固定装置 例如 loop test
  • 在 .NET 中创建 Active Directory 用户 (C#)

    我需要在 Active Directory 中创建一个新用户 我发现了几个例子 如下所示 using System using System DirectoryServices namespace test class Program st
  • Java 9 中的类加载器层次结构

    从 Java 8 开始 我知道类加载器的层次结构如下 引导类加载器 扩展类加载器 应用程序类加载器 Java 9 中类加载器的层次结构有何变化以及它是如何工作的 这里是迁移指南 https docs oracle com javase 9
  • getComputedStyle 规范中是否指定了颜色格式?

    我正在解析返回的颜色字符串getComputedStyle to get R G B and A从中获取价值 到目前为止 在 Chrome 和 Firefox 中 颜色值似乎总是返回rgb or rgba易于解析的格式 const r g
  • 在选项卡式活动中将 sqlite 数据库中的所有数据显示到列表视图中

    作为 Android 开发的新手 我已经在这个问题上被困了几个星期了 而且越来越累了 在查看了每个教程并阅读了我能找到的每个问题和答案之后 我仍然不知道如何让 Android Studio 只获取 SQLite 数据库中的内容并将其内容粘贴
  • 未找到 EGLConfig

    我正在尝试使用 android 制作简单的游戏AndEngine教程 http www raywenderlich com 12065 how to create a simple android game 现在 当我运行该项目时 我收到错
  • AngularJS 只有 ng-repeat 动画中的第一个元素

    由于某种原因 使用下面的代码 ngRepeat 仅对第一个项目进行动画处理并立即显示其余项目 一旦scope categories项目已更新 模板中触发了 ng repeat dataSource getCategories then fu
  • C++ 复制构造函数和浅复制

    假设我有一个类 其中有许多显式 静态分配 成员和一些动态分配的指针 当我声明一个复制构造函数时 我对手动分配的成员进行了深层复制 我不想显式地复制每个静态分配的成员 如何在显式复制构造函数中使用隐式 默认 复制构造函数功能 Use 遏制 c
  • 如何使用 PKAddPassButton 添加“添加到 Apple 钱包”按钮 - swift

    抱歉 如果这听起来很愚蠢 这里完全是菜鸟 我正在尝试创建 添加到Apple Wallet 按钮 但我不知道怎么办 我已经尝试过代码片段here https stackoverflow com questions 49773184 how t
  • MFMessageComposeViewController 中 MessageComposeResult 的条件与 swift [重复]

    这个问题在这里已经有答案了 我正在尝试实现 MFMessageComposeViewControllerDelegate 所需的方法 func messageComposeViewController controller MFMessag
  • AngularJS http.post() 返回 404

    祝大家圣诞快乐 我正在使用 Phonegap AngularJS 应用程序 我正在尝试创建一个 http Post 但它返回 404 错误 我尝试使用 jquery 1 10 2 进行 POST 它有效 我已经为此花费了几天时间 这是完成应
  • 试图阻止 jQuery Mobile 滑动手势冒泡,但它不起作用

    我正在使用 jQuery Mobile 并创建了一些类似于 Android Holo Tabs 的东西 http note io 18RNMRk http note io 18RNMRk 为了使滑动手势能够在选项卡之间切换 这是我添加的代码