2016-04-11 12 views
0

Ich habe zwei Bilder mit gleichen Abmessungen und gleichen Positionen, aber in divs mit dynamischer Breite je nach Benutzerinteraktion mit der jquery beforeAfter plugin platziert.scrollen Zoom auf zwei Bilder

Ich möchte Scrollzoom auf diesen Bildern unter Verwendung von wheelzoom aktivieren, so dass das Zoomen auf einem dieser Bilder den gleichen Betrag an der gleichen Position wie der andere vergrößert.

Was vermag ich nicht zu tun, ist diese Verknüpfung von (nehme ich an) die Ereignishandler nach dem Vorbild dieses:

function onwheel(e){ 
    //adjust image to fit zoom level ... 

    other_img.onwheel(e); 
} 

Wenn dies nicht möglich ist, ist es möglich, das Ereignis zu kopieren und ändern Sie die Zielbild?

Ich bin auf der Suche nach einer Lösung mit jquery oder nativem Javascript.

Code here (ignorieren Sie den Griff).

EDIT: Alle Top-Level-Zeiger auf das, was sollte auch

Antwort

1

machte ich an einem Beispiel: http://plnkr.co/edit/kH0ec8TVMXUIYlMoBaMq?p=preview

hier ist der Kern-Code:

document.getElementsByClassName("before")[0].addEventListener("wheel", function(event){ 
    if(flag){ 
    flag= false; 
    return; 
    }; 
    flag=true; 
    var newEvent = new WheelEvent("wheel",event); 
    var elementToTrigger = document.getElementsByClassName("after")[0]; 
    elementToTrigger.dispatchEvent(newEvent); 
}); 

ich einfach etwas tun, wenn ein Ereignis ("Rad") einen Trigger das gleiche Ereignis passiert zu einem anderen Element und übergeben als Argument die Daten vom ersten Ereignis an das neue Ereignis. Ich benutze eine Flag-Variable, um den benutzerdefinierten Ereignis-Trigger zu veranlassen, das andere Ereignis erneut auszulösen und eine ewige Schleife zu starten.

Dies ist eine Lösung, ohne den Quellcode des Plugins zu bearbeiten. Sie können mehr gute Lösungen machen, wenn Sie den Code von wheelzoom.js ändern.

+0

Wie würden Sie es empfehlen, wenn ich Wheelzoom.js bearbeite (ohne in zu viele Details zu gehen)? –

+0

Sie können die Bibliothek verwenden, um zwei oder mehr Elemente zu verwenden: radzoom ($ ('. Before'), $ ('. After')); und mach es wie eins. Die Bibliothek wird gefunden, wenn ein Ereignis passiert ist, und vergrößert ein Array von Elementen und nicht nur eines, so dass kein neues Ereignis ausgelöst werden muss. Hinweis: Dies wird einfacher, wenn Sie die Bibliothek für die Verwendung von jquery umgestalten. –

0

würde geschätzt funktioniert die eine Zoomfunktion, die genügend Parameter nimmt das Zoomen zu handhaben und erhalten Sie die Werte, die Sie aus dem Ereignishandler müssen.

function handleZoom(domNode, zoomDirection, zoomAmount) { 
    // Do stuff to change the size of `domNode` 
} 

var img1, img2; 

img1 = /* select image node */; 
img2 = /* select image node */; 

function handleScroll(scrollEvent) { 
    var direction, amount; 

    // Use `scrollEvent` to figure out which direction and how far to zoom 

    handleZoom(img1, direction, amount); 
    handleZoom(img2, direction, amount); 
} 

img1.onscroll = handleScroll; 
img2.onscroll = handleScroll; 
+0

Benötigen Sie keine Informationen aus dem Ereignis, um 'zoomDirection' und' zoomAmount' zu bestimmen, damit Sie sie an 'handleZoom' übergeben können? Könnten Sie diesen Teil deutlicher machen? –

+0

In diesem Handler wurde 'e' in' scrollEvent' geändert und der Kommentar deutlicher gemacht. Das Holen von Informationen aus dem Ereignis ist 100% der Punkt dieser Funktion. –

+0

@ M.T hilft das? –