3

我将Zepto.js用于移动 Web 应用程序。Zepto 带有方便的方法,例如swipe,swipeLeftswipeRight.

例如:swipeLeft向左滑动完成后触发手势。至少我是这么看的。

是否可以通过此滑动手势使用实时值更新元素的位置。

因此,当我在文档上缓慢向左滑动时,我想div.layer与我一起缓慢移动。当达到临界点时,layer应该捕捉到预定义的位置。

这是否可能以某种方式。如果 Zepto 无法实现,我会选择不同的框架。


我现在拥有的

HTML

<div class="page-wrap">

    <section class="layer" id="one">

    </section>

    <section class="layer" id="two">

    </section>

</div>

CSS

.page-wrap {
    position:relative;
    width:100%;
    height:100%;
}

.page-wrap .layer {
    width:100%;
    height:100%;    
    position:absolute;
    top:0;
}   

.page-wrap #one {
    background:red;
}

.page-wrap #two {
    left:-100%;
    background:green;
}

JS

$(document).ready(function() {  
    $('#two').swipeRight(function(e) {
        showInfos(true);
    });

    $('#one').swipeLeft(function(e) {
        showInfos(false);
    });
});

function showInfos(show) {
    $("#two").animate({
        left: show?'0':'-100%'
    }, 200, 'ease-out');
}

这行得通!位于.layer#two可见视口之外。向右滑动时.layer#one.layer#two从左侧滑入。向左滑动时,将向左.layer#two.layer#two回。

这正是我希望我的应用程序做的事情。这种模式是众所周知的,很多应用程序都使用这种 UI 模式。

然而,我想要它做的是表现得好像它是手机上的本机应用程序,当手指沿着.layers滑动时, .layers 会更新它们相对于用户手指的位置。swipe所以我不希望动画在手势完成后生效。我希望在刷卡position.layer#two实时更新。

也许你想在某个地方进行现场测试。我在jsfiddle上提供了上面的片段。

我真的很感激这方面的一些帮助。或提示和技巧。我想我可能不是唯一对这样的事情感兴趣的人。

4

1 回答 1

2

考虑使用您自己的触摸事件处理程序:http: //www.html5rocks.com/en/mobile/touch/

从该页面拖动 div 的示例:

var obj = document.getElementById('id');
obj.addEventListener('touchmove', function(event) {
  // If there's exactly one finger inside this element
  if (event.targetTouches.length == 1) {
    var touch = event.targetTouches[0];
    // Place element where the finger is
    obj.style.left = touch.pageX + 'px';
    obj.style.top = touch.pageY + 'px';
  }
}, false);

如果您将其更新为仅更改 x 坐标,那么您应该差不多完成了。

于 2012-10-11T10:44:02.643 回答