使用iscroll和jquery移动绑定问题

时间:2011-10-11 11:50:45

标签: jquery jquery-mobile iscroll4

我正在努力让我的头发试图让iscroll 4与jQuery Mobile合作。

如果我禁用JQM ajax默认导航,但一切正常,但我想保留它。

我的问题是我无法解决如何成功调用/绑定iscroll以使其适用于需要它们的页面。我试过pageinit()和pagecreate()无济于事。

这里可以找到一个基本的例子: http://bit.ly/ngXkNR

任何指针都非常赞赏。

一个。

2 个答案:

答案 0 :(得分:7)

谢谢贾斯珀, 我稍微改变了你的方法,这样你就可以在任何用类标识的包装器上调用iScroll。 另外,我在pagehide事件上卸载并销毁所有iScroll实例 - 我不需要刷新方法来满足我的需求:

// iScroll variable
var myScroll = [];

$(document).delegate('[data-role="page"]', 'pageshow', function () {

    var $page = $(this);

    // setup iScroll
    $($page.find('.iscroll_wrapper')).each(function(index) {

        var scroller_id = $(this).get(0);

        myScroll.push(
            new iScroll(scroller_id, {
                snap       : true,
                momentum   : false,
                hScrollbar : false
            }));
    });

});

$(document).delegate('[data-role="page"]', 'pagehide', function () {

    // unset and delete iScroll
    for (x in myScroll)
    {
        myScroll[x].destroy();
        myScroll[x] = null;
        myScroll.splice(x, 1);
    }

});

答案 1 :(得分:6)

按照我四天前为您创建的示例(using iscroll with jquery mobile)...您绑定到的事件仅在初始页面加载时触发,并且您希望绑定到每当触发的jQuery Mobile事件将新页面添加到DOM中。

变化:

var myScroll;
document.addEventListener('DOMContentLoaded', loaded, false);

要:

var myScroll = [];
$(document).delegate('[data-role="page"]', 'pagecreate', function () {
        myScroll[this.id] = new iScroll(this.id + '_wrapper', {
        snap: true,
        momentum: false,
        hScrollbar: false
     });
});

这需要将每个页面上的wrapper div重命名为_wrapper。无论如何,这是必要的,因为具有ID的每个元素都需要DOM中的唯一ID。

链接:using iscroll with jquery mobile

<强> - UPDATE -

我创建了一个在多个页面上使用iScroll轮播的示例。请注意我如何在每个页面上包含自定义JavaScript和CSS,因此如果用户刷新页面(在任何页面上),由于缺少代码,它们不会收到任何错误。

以下是工作示例的链接:http://apexeleven.com/stackoverflow/iScroll/default.html