我正在尝试针对移动Web应用程序在javascript中模拟二维UIScrollView的行为。虽然默认情况下在移动Webkit上可以使用2d滚动,但是滚动事件似乎非常麻烦。例如,在拖动屏幕时,我需要跟踪左右偏移量。

我发现大多数js库一次都可以在1个方向上工作。

提示非常欢迎!

最佳答案

一个例子/进一步的解释。

基本;


带有图像的面板,ID为“ plattegrond”
我在这个“平台”上附加了一个听众
当用户点击地图时,将添加一个单独的元素,用户可以在其中定位和拖动。


滚动功能是对PANEL(图像面板)的引用。将引用拖动到ELEMENT(imageP)

假设您知道如何制作标准面板(滚动:两者;全屏:true),下面的代码就从添加元素开始;

imagePanel.add([{ id: "plattegrond", html: plattegrondurl }]);
imagePanel.doLayout();

// Fill a variable for future reference to the added item
dom = Ext.get("plattegrond");


下面是我在应用程序中使用的主要代码。该代码仅适合我的应用程序的需求,但提供了如何使用滚动器“偏移和拖动”的示例。

// Register the TAP event on the image
dom.on('tap', function(e){

    // Find out about the scroll OFFSET // how much pixels the user has scrolled the Panel
    var Xscroll = imagePanel.scroller.offset.x;
    var Yscroll = imagePanel.scroller.offset.y;


    // Get the X and Y coordinates of the tap
    var Xpos = e.pageX;
    var Ypos = e.pageY;

    /* Further calculation of exact coordinates

    - If the user hasn't scrolled the Xpos and Ypos can stay unchanged
    - If the user has scrolled, then Xpos - Xscroll && Ypos - Yscroll will be the reel coordinates

    */

    // Attach a listener to the element that has to be added to the main Panel
    imageP.listeners = {

        dragend: function(element, drag) {

            // Get the real element that the user touches
            recordid = plattegrondStore.find("puntid", element.el.id);
            record = plattegrondStore.getAt(recordid);


            // Calculate the real X and Y of the element using the 'drag.deltaX' & 'drag.deltaY'
            delta1 = record.data.x + drag.deltaX;
            delta2 = record.data.y + drag.deltaY;

            /* Further usage of this data (I for example push the new X and Y into a store) */

        },

        scope: this

    }

    // Add image to Panel
    imagePanel.add(imageP);

});

09-30 22:53