2012-06-26 43 views
7

Trong Safari trên OS X, với bàn di chuột ma thuật hoặc bàn di chuột macbook, vuốt sang phải hoặc trái bằng hai ngón tay tác động ngược và tiến, tương ứng. Có cách nào để phát hiện điều này, khác biệt với việc nhấp vào/tua lại hay nhấn lệnh + mũi tên, v.v.Phát hiện swipe hai ngón tay của Safari

Lý do là thao tác vuốt có hoạt ảnh vuốt theo kiểu tiết lộ của riêng nó và với các chuyển đổi ajax tùy chỉnh trên trang web, có vẻ thật kỳ lạ khi bạn nhận được sự kiện theo dõi khác. Điều này xảy ra khi duyệt mã trên github, ví dụ.

Cập nhật 23/6/16: Github được hoàn nguyên để chỉ cần trao đổi nội dung trang mà không cần chuyển đổi, đó là một động thái thông minh. Thực hành hiện tại của tôi là làm tương tự cho quay lại/chuyển tiếp, ngay cả khi một số loại chuyển tiếp ưa thích được sử dụng trên trang web. Điều này ngăn các xung đột giữa bất kỳ trình duyệt nào có thể thực hiện và chuyển đổi trang web

+0

Không chắc tôi hiểu những gì bạn có ý nghĩa bởi "swipe đã nó sở hữu tiết lộ kiểu swiping hoạt hình ". Các hoạt ảnh nhỏ của GitHub trên popstate trông giống với tôi trong Chrome và Safari. –

+0

Có, nhưng hãy thử vuốt (bằng bàn di chuột hiện đại của Apple) và bạn sẽ thấy ý tôi là ... – Greg

+1

Ồ, Chúa ơi. Đó là khủng khiếp. Tôi đã phải chuyển đổi từ vuốt ba ngón tay sang vuốt hai ngón tay để làm cho nó xảy ra. –

Trả lời

7

Bạn có thể sử dụng các sự kiện mousewheel để xem nếu một cuộn ngang trên trackpad đã được thực hiện trước khi sự kiện popstate của bạn:

// boolean that stores if a swipe has been performed. 
var bScrolled = false; 
// countdown in ms before resetting the boolean. 
var iTime = 1000; 
var oTimeout; 
window.addEventListener('mousewheel', function(e) { 
    if (e.wheelDeltaY === 0) { 
    // there is an horizontal scroll 
    if (!bScrolled) { 
    // no need to set bScrolled to true if it has been done within the iTime time. 
     bScrolled = true; 
     oTimeout = setTimeout(function(){ 
     bScrolled = false; 
     }, iTime); 
    } 
    } 
}); 

window.onpopstate = function() { 
    // clear the timeout to be sure we keep the correct value for bScrolled 
    clearTimeout(oTimeout); 
    // check if there has been a swipe prior to the change of history state 
    if (bScrolled) { 
    // check which browser & OS the user is using, then 
    // trigger your awesome custom transition. 
    } 
} 
-2

Trong một từ, không. Vuốt được viết vào mã UNIX phía sau OS X và vào mã của trình duyệt Safari. Sau đó trình duyệt sẽ nhận ra cử chỉ và diễn giải nó thành các nút quay lại/tiến.

Điều đó nói rằng, bạn có thể viết một số mã sẽ nhận ra một cuộn trên trang của một vận tốc nào đó sau đó sẽ kích hoạt mã của bạn, nhưng bạn sẽ luôn cạnh tranh với nhận dạng nút quay lại/chuyển tiếp được mã hóa trước của trình duyệt. Theo hiểu biết của tôi, bạn không thể sửa đổi trình duyệt từ bên trong HTML (hoặc bất kỳ ngôn ngữ nào khác, cho vấn đề đó).

+0

Cảm ơn câu trả lời - chỉ để rõ ràng, tôi không cần phải ngăn chặn hoạt ảnh vuốt (mặc dù điều đó sẽ tốt đẹp!). Chỉ cần có thể phát hiện ra nó để tôi có thể ngăn chặn sự chuyển đổi của riêng tôi xảy ra sẽ là đủ. – Greg

+0

Tôi biết. Điều tôi đang nói là hoạt ảnh vuốt là thứ gì đó được tích hợp vào OS X chứ không phải chương trình. Vì vậy, ít nhất là với kiến ​​thức của tôi, bạn không thể phát hiện nó từ bên trong một trình duyệt vì bạn không được phép truy cập vào hệ điều hành của khách hàng từ bên trong trang web. –

+0

Ok, vâng thử nghiệm của riêng tôi sao lưu mà lên - Tôi đã cố gắng tìm sự khác biệt giữa các đối tượng sự kiện cho các trường hợp khác nhau, vô ích. – Greg

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