Swipeleft 或 Swiperight 不改变页面

Posted

技术标签:

【中文标题】Swipeleft 或 Swiperight 不改变页面【英文标题】:Swipeleft or Swiperight not changing page 【发布时间】:2014-10-02 17:29:56 【问题描述】:

我在尝试在 Appery.io 应用上滑动时更改页面时遇到了这个问题。滑动手势有效,但页面没有改变,使用 $(this).next('[data-role="page"] 总是给我一个 0 的长度。

这是页面的组成:

下面是使用$(this).next('[data-role="page"] 时控制台的外观:

这是我目前正在测试的代码:

$('.ui-mobile').on("swipeleft",'[data-role="page"]', function () 
    console.log('swipe next page');
    var next = $(this).next('[data-role="page"]');
    console.log(next);
    if (next.length > 0) 
        $.mobile.changePage(next, "slide", false, true);
    
);

所以回顾一下。滑动有效,因为控制台记录了它。当我看到'nextsibling'是客场演出时,'previoussibling'也是如此,我不确定这是否是正确的属性。

我环顾四周,看到一些类似的帖子,每个帖子都有勾号,但无论我查看和测试哪个帖子,结果都是一样的。长度始终为 0。

任何想法我做错了什么?

提前致谢。

添加

【问题讨论】:

我不同意这是重复的,在移动 jQuery 1.5 发布时,'activePage' 将被删除。所以使用你的解决方案只是暂时的?请改变你的看法。 @Omar,请删除重复的标签。这不是重复的,您的回答不能解决我的问题!我已经等了一个小时,不理我是行不通的。 您没有提及您使用的是哪个版本。 【参考方案1】:

将滑动事件绑定到文档,然后检查活动页面是否在.prev().after()之前有一个页面。

$(document).on('swipeleft swiperight', function (event) 
    if (event.type == 'swipeleft') 
        var activePage = $.mobile.pageContainer.pagecontainer("getActivePage"),
            nextPage = activePage.next('[data-role=page]');
        if (nextPage) 
            $.mobile.pageContainer.pagecontainer("change", nextPage, 
                transition: "flip"
            );
        
    
    if (event.type == 'swiperight') 
        var activePage = $.mobile.pageContainer.pagecontainer("getActivePage"),
            prevPage = activePage.prev('[data-role=page]');
        if (prevPage) 
            $.mobile.pageContainer.pagecontainer("change", prevPage, 
                transition: "flip",
                reverse: true
            );
        
    
);

Demo

【讨论】:

这不起作用。我正在使用带有模板的 Appery.io。更改文档不是我想要更改的内容,而是活动 div。也许我正在尝试错误的方法来做到这一点。但我应该添加类以使其处于活动状态。滑动有效,但我的也有效,但是您示例中的页面显示的是一个空页面,带有模板或任何内容? @AndrewWalker 在上面的代码中,它更改了页面 div 而不是文档。您要更改页面 (html) 或页面 (div)? 我试图更改文档,因为它看起来好像,即使使用模板,整个页面也会加载新的,即使它是一个模板。所以看起来模板重新加载了新的活动 div(或页面)。但是通过重新加载文档而不是 div,您将获得相同的页面。什么都没有改变。在您的示例中,文档更改为空白页。 @AndrewWalker 所以你正在尝试加载一个新的 HTML 页面,对吗? 我认为这就是它想要做的。我需要进一步调查。对我来说,它看起来需要重新加载整个页面并添加一个新的 div,其中的内容来自另一个文件【参考方案2】:

在 Omar 的帮助下,我设法解决了这个问题。

因为changePageactivePage

自 jQuery Mobile 1.4.0 起已弃用,并将在 1.5.0 中删除。

我需要一个可以持续使用的版本,因此我设法使用以下代码对其进行了修复:

$(document).on('swipeleft swiperight', function (event) 

    //Check current page id
    var activePage = $.mobile.pageContainer.pagecontainer("getActivePage");
    //Get div (page) id
    activePage = activePage.attr('id');
    //Get number of page ie page1, page2, page3 page4 etc
    var activePageNo = activePage.slice(4);
    //Get current full URL
    var activeURL = $(location).attr('href');
    //Remove div (page) ref from url
    activeURL = activeURL.substr(0,activeURL.indexOf("#"));


    //Set up new numbers for next and prev swipes
    var np = parseInt(activePageNo)+1;
    var pp = parseInt(activePageNo)-1;
    //Set full div (page) ids 
    var prevPage = '';
    var nextPage =  'page' + np;
    if(activePageNo > 0) 
        prevPage = 'page' + pp;
     else 
        prevPage = 'page0';
    

    if (event.type == 'swipeleft') 
       if (nextPage) 
           $.mobile.pageContainer.pagecontainer("change", activeURL + '#' + nextPage, 
               transition: "slide"
           );
       
    

    if (event.type == 'swiperight') 
        if (prevPage) 
            $.mobile.pageContainer.pagecontainer("change", activeURL + '#' + prevPage, 
                transition: "slide",
                reverse: true
            );
        
    
);

希望这有助于其他希望从旧 1.4 进行更改并为新 1.5 做好准备的人:)

【讨论】:

以上是关于Swipeleft 或 Swiperight 不改变页面的主要内容,如果未能解决你的问题,请参考以下文章

Swipe、swipeleft、swiperight 事件不会在图像上触发

使用Hammer and Angular 8在整个屏幕上捕获滑动事件

Kinect 常用识别手势

手机的滑动效果用html5如何实现

jquery移动滑动事件禁用输入范围

移动端项目 添加 触屏 swipe事件[记录]