2012-12-20 38 views
6

Tôi hiện đang phát triển trang web cho iPhone chứa phần tử DIV mà người dùng có thể chạm và kéo xung quanh. Ngoài ra, khi người dùng kéo phần tử lên đầu hoặc cuối màn hình thiết bị, tôi muốn tự động cuộn trang lên hoặc xuống.Các lần chạm trên iOS đến tọa độ xem x/y của thiết bị qua Javascript

Sự cố tôi đang gặp đang cố gắng xác định công thức đáng tin cậy để nhận tọa độ trong sự kiện onTouchMove kết hợp với ngón tay của người dùng chạm đầu hoặc cuối chế độ xem thiết bị. Công thức hiện tại của tôi dường như tẻ nhạt và tôi cảm thấy có thể có một cách dễ dàng hơn để làm điều này.

thức hiện tại của tôi để xác định xem trường hợp cảm ứng đã đạt đến dưới cùng của màn hình:

function onTouchMoveHandler(e) 
{ 
    var orientation=parent.window.orientation; 
    var landscape=(orientation==0 || orientation==180)?true:false; 
    var touchoffsety=(!landscape?screen.height - (screen.height - screen.availHeight):screen.width - (screen.width - screen.availWidth)) - e.touches[0].screenY + (window.pageYOffset * .8); 
    if(touchoffsety < 40) alert('finger is heading off the bottom of the screen'); 
} 

Tôi đã làm một chút Javascript phản ánh trên các đối tượng như cửa sổ, tài liệu, cơ thể, e.touches để xem liệu tôi có thể tìm thấy một tập hợp các con số luôn luôn tăng lên bằng với phần trên cùng hoặc dưới cùng của màn hình, nhưng không thành công đáng tin cậy. Trợ giúp với điều này sẽ được đánh giá cao.

+0

Đây là liên kết có giải thích sâu về các nền tảng di động và biến Javascript khác nhau mô tả thứ nguyên khung nhìn và số lượng chúng có thể khác nhau. Điều này đã giúp tôi tìm câu trả lời: http://tripleodeon.com/2011/12/first-understand-your-screen/ – Brain2000

Trả lời

2

Giả sử trường screenY của một lần chạm giữ toạ độ y tương ứng với đầu màn hình bất kể vị trí cuộn hiện tại, phép tính hiện tại của bạn không có ý nghĩa gì đối với tôi. Tôi hy vọng tôi không hiểu lầm những gì bạn đang cố gắng làm.

Để tìm hiểu xem một chạm có gần đầu hay cuối thiết bị, trước tiên tôi sẽ kiểm tra xem màn hình có gần đầu hay không (trên cùng là 0), vì bạn có thể làm việc trực tiếp với giá trị đó. Sau đó, nếu nó không gần đầu, hãy tính toán nó ở gần đáy và kiểm tra xem nó như thế nào.

var touch = e.touches[0]; 
if (touch.screenY < 50) 
{ 
    alert("Closing in on Top"); 
} 
else //Only do bottom calculations if needed 
{ 
    var orientation=parent.window.orientation; 
    var landscape=(orientation==0 || orientation==180)?true:false; 
    //height - (height - availHeight) is the same as just using availHeight, so just get the screen height like this 
    var screenHeight = !landscape ? screen.availHeight : screen.availWidth; 
    var bottomOffset = screenHeight - touch.screenY; //Get the distance of the touch from the bottom 
    if (bottomOffset < 50) 
     alert("Closing in on Bottom"); 
} 
+0

Đó là một trong những vấn đề tôi đã gặp phải. Người ta có thể nghĩ screenY là tất cả những gì bạn cần, nhưng đó không phải là trường hợp. Một lý do là bởi vì nếu bạn có hai iFrames, và đang kéo một DIV trong iFrame dưới cùng, các con số dường như nghiêng tùy thuộc vào cách bạn đang cuộn xuống. Đó là nơi window.pageYOffset đi vào chơi, nó cho biết cách cửa sổ trình duyệt được cuộn xuống bao xa. Nhưng tùy thuộc vào nơi nó được di chuyển đến, nó có vẻ như trên hoặc dưới đền bù cho số tiền chính xác. Đó là lý do tại sao tôi fudged nó với nhân nó bằng. 8, nhưng nó vẫn là khó tính. – Brain2000

+0

Bạn đã thử khách hàng? Có lẽ điều này cũng sẽ giúp bạn: http://stackoverflow.com/questions/5885808/includes-touch-events-clientx-y-scrolling-or-not – Wutz

+0

Vâng, tôi đã thử cả ba, clientY, screenY và touchY. – Brain2000

1

Điều đó thực sự không tệ. Bạn cũng có thể sử dụng Zepto.js và nó được xây dựng trong các sự kiện liên lạc và .offset() phương pháp để có được nó một chút dễ dàng hơn:

Tuy nhiên, tôi quan tâm để biết liệu hay không bạn thực sự quản lý để có được nó di chuyển ở phía dưới, và nếu hiệu suất là đủ mịn để làm cho hiệu quả đáng giá. (thường cuộn trong JavaScript ngắt JavaScript thực sự khó)

+0

Tôi có nó hoạt động khá tốt trên iPad 1 bằng cách sử dụng window.outerHeight - touch.screenY <40. Tôi đang sử dụng một setTimeout ở 20 mili giây cuộn bằng cách thiết lập tham số .scrollTop tăng lên 20 pixel mỗi lần. Tôi cũng di chuyển div mà ngón tay của bạn đang nắm giữ bởi cùng một số tiền để nó xuất hiện để không di chuyển trong khi nền cuộn. Hiệu suất thực sự khá trơn tru. – Brain2000

Các vấn đề liên quan