2012-06-26 8 views
7

In Safari auf OS X, mit einem magischen Trackpad oder Macbook Trackpad, wischen nach rechts oder links mit zwei Fingern Effekte vor bzw. zurück. Gibt es eine Möglichkeit, dies zu erkennen, im Gegensatz zu einem Klick zurück/vorwärts oder einem Befehl + Pfeil usw.?Erkennen des Desktop-Safari Zweifinger-Swipe

Der Grund dafür ist, dass der Swipe über eine eigene Swiping-Animation im Reveal-Stil verfügt, und mit benutzerdefinierten Ajax-Übergängen auf einer Site sieht er wirklich komisch aus, wenn Sie einen nach dem anderen bekommen. Dies passiert beispielsweise beim Durchsuchen von Code auf GitHub.

Update 23/6/16: Github kehrte einfach den Seiteninhalt ohne Übergang um, was ein kluger Schachzug war. Meine derzeitige Praxis ist es, das gleiche für Back/Forward zu tun, auch wenn irgendeine Art von schicklichen Übergang in der Website verwendet wird. Dies verhindert Konflikte zwischen dem, was der Browser möglicherweise tut, und dem Site-Übergang

+0

nicht sicher, ob ich verstehe, was Sie mit „die Swipe über ihre eigenen offenbaren Stil Wischen Animation ". GitHubs kleine Animationen auf popstate sehen in Chrome und Safari genauso aus. –

+0

Ja, aber versuchen Sie zu wischen (mit einem modernen Apple Trackpad) und Sie werden sehen, was ich meine ... – Greg

+1

Oh, Gott. Das ist schrecklich. Ich musste vom Drei-Finger-Wischen zum Zwei-Finger-Wischen zurückkehren, um es zu ermöglichen. –

Antwort

7

können Sie das Mausrad-Ereignis verwenden, um zu sehen, ob eine horizontale Scroll auf dem Trackpad hat vor Ihrer popstate Veranstaltung durchgeführt wurde:

// 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

In einem Wort, nein. Der Swipe wird in den UNIX-Code hinter OS X und in den Code des Safari-Browsers geschrieben. Der Browser erkennt dann die Geste und interpretiert sie als die Zurück/Vorwärts-Tasten.

Das gesagt, könnten Sie wahrscheinlich Code schreiben, der ein Scrollen auf der Seite einer bestimmten Geschwindigkeit erkennen würde, die dann Ihren Code auslösen würde, aber Sie würden immer in Konkurrenz mit der vorcodierten Rück-/Vorwärts-Tastenerkennung stehen des Browsers. Soweit ich weiß, können Sie den Browser nicht innerhalb von HTML (oder einer anderen Sprache) ändern.

+0

Danke für die Antwort - nur um klar zu sein, muss ich die Wischanimation nicht verhindern (obwohl das nett wäre!). Nur in der Lage zu sein, es zu erkennen, so dass ich verhindern kann, dass mein eigener Übergang geschieht, wäre ausreichend. – Greg

+0

Ich weiß. Was ich sage ist, dass die Swipe-Animation etwas ist, das in OS X eingebaut ist, nicht das Programm. Daher können Sie es meines Wissens nicht von einem Browser aus erkennen, da Sie nicht von der Website aus auf das Betriebssystem des Clients zugreifen dürfen. –

+0

Ok, ja, meine eigenen Tests unterstützen das - ich habe versucht, Unterschiede zwischen dem Ereignisobjekt für die verschiedenen Fälle zu finden, ohne Erfolg. – Greg

Verwandte Themen