mirror of
https://github.com/openseadragon/openseadragon.git
synced 2024-11-25 14:46:10 +03:00
Merge pull request #2225 from HamzaTatheer/master
One touch zoom in & out function #2077
This commit is contained in:
commit
5bba14a763
7126
package-lock.json
generated
7126
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -74,6 +74,7 @@ $.ControlAnchor = {
|
||||
* @param {Element} container - the element to control will be anchored too.
|
||||
*/
|
||||
$.Control = function ( element, options, container ) {
|
||||
|
||||
var parent = element.parentNode;
|
||||
if (typeof options === 'number')
|
||||
{
|
||||
@ -150,6 +151,7 @@ $.Control = function ( element, options, container ) {
|
||||
} else {
|
||||
parent.appendChild( this.wrapper );
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
/** @lends OpenSeadragon.Control.prototype */
|
||||
|
@ -341,6 +341,9 @@
|
||||
* @property {Boolean} [gestureSettingsMouse.clickToZoom=true] - Zoom on click gesture
|
||||
* @property {Boolean} [gestureSettingsMouse.dblClickToZoom=false] - Zoom on double-click gesture. Note: If set to true
|
||||
* then clickToZoom should be set to false to prevent multiple zooms.
|
||||
* @property {Boolean} [gestureSettingsMouse.dblClickDragToZoom=false] - Zoom on dragging through
|
||||
* double-click gesture ( single click and next click to drag). Note: If set to true
|
||||
* then clickToZoom should be set to false to prevent multiple zooms.
|
||||
* @property {Boolean} [gestureSettingsMouse.pinchToZoom=false] - Zoom on pinch gesture
|
||||
* @property {Boolean} [gestureSettingsMouse.zoomToRefPoint=true] - If zoomToRefPoint is true, the zoom is centered at the pointer position. Otherwise,
|
||||
* the zoom is centered at the canvas center.
|
||||
@ -356,6 +359,10 @@
|
||||
* @property {Boolean} [gestureSettingsTouch.clickToZoom=false] - Zoom on click gesture
|
||||
* @property {Boolean} [gestureSettingsTouch.dblClickToZoom=true] - Zoom on double-click gesture. Note: If set to true
|
||||
* then clickToZoom should be set to false to prevent multiple zooms.
|
||||
* @property {Boolean} [gestureSettingsTouch.dblClickDragToZoom=true] - Zoom on dragging through
|
||||
* double-click gesture ( single click and next click to drag). Note: If set to true
|
||||
* then clickToZoom should be set to false to prevent multiple zooms.
|
||||
|
||||
* @property {Boolean} [gestureSettingsTouch.pinchToZoom=true] - Zoom on pinch gesture
|
||||
* @property {Boolean} [gestureSettingsTouch.zoomToRefPoint=true] - If zoomToRefPoint is true, the zoom is centered at the pointer position. Otherwise,
|
||||
* the zoom is centered at the canvas center.
|
||||
@ -386,6 +393,9 @@
|
||||
* @property {Boolean} [gestureSettingsUnknown.clickToZoom=false] - Zoom on click gesture
|
||||
* @property {Boolean} [gestureSettingsUnknown.dblClickToZoom=true] - Zoom on double-click gesture. Note: If set to true
|
||||
* then clickToZoom should be set to false to prevent multiple zooms.
|
||||
* @property {Boolean} [gestureSettingsUnknown.dblClickDragToZoom=false] - Zoom on dragging through
|
||||
* double-click gesture ( single click and next click to drag). Note: If set to true
|
||||
* then clickToZoom should be set to false to prevent multiple zooms.
|
||||
* @property {Boolean} [gestureSettingsUnknown.pinchToZoom=true] - Zoom on pinch gesture
|
||||
* @property {Boolean} [gestureSettingsUnknown.zoomToRefPoint=true] - If zoomToRefPoint is true, the zoom is centered at the pointer position. Otherwise,
|
||||
* the zoom is centered at the canvas center.
|
||||
@ -400,6 +410,9 @@
|
||||
* @property {Number} [zoomPerScroll=1.2]
|
||||
* The "zoom distance" per mouse scroll or touch pinch. <em><strong>Note:</strong> Setting this to 1.0 effectively disables the mouse-wheel zoom feature (also see gestureSettings[Mouse|Touch|Pen].scrollToZoom}).</em>
|
||||
*
|
||||
* @property {Number} [zoomPerDblClickDrag=1.2]
|
||||
* The "zoom distance" per double-click mouse drag. <em><strong>Note:</strong> Setting this to 1.0 effectively disables the double-click-drag-to-Zoom feature (also see gestureSettings[Mouse|Touch|Pen].dblClickDragToZoom).</em>
|
||||
*
|
||||
* @property {Number} [zoomPerSecond=1.0]
|
||||
* Sets the zoom amount per second when zoomIn/zoomOut buttons are pressed and held.
|
||||
* The value is a factor of the current zoom, so 1.0 (the default) disables zooming when the zoomIn/zoomOut buttons
|
||||
@ -1203,6 +1216,7 @@ function OpenSeadragon( options ){
|
||||
scrollToZoom: true,
|
||||
clickToZoom: true,
|
||||
dblClickToZoom: false,
|
||||
dblClickDragToZoom: false,
|
||||
pinchToZoom: false,
|
||||
zoomToRefPoint: true,
|
||||
flickEnabled: false,
|
||||
@ -1215,6 +1229,7 @@ function OpenSeadragon( options ){
|
||||
scrollToZoom: false,
|
||||
clickToZoom: false,
|
||||
dblClickToZoom: true,
|
||||
dblClickDragToZoom: true,
|
||||
pinchToZoom: true,
|
||||
zoomToRefPoint: true,
|
||||
flickEnabled: true,
|
||||
@ -1227,6 +1242,7 @@ function OpenSeadragon( options ){
|
||||
scrollToZoom: false,
|
||||
clickToZoom: true,
|
||||
dblClickToZoom: false,
|
||||
dblClickDragToZoom: false,
|
||||
pinchToZoom: false,
|
||||
zoomToRefPoint: true,
|
||||
flickEnabled: false,
|
||||
@ -1239,6 +1255,7 @@ function OpenSeadragon( options ){
|
||||
scrollToZoom: false,
|
||||
clickToZoom: false,
|
||||
dblClickToZoom: true,
|
||||
dblClickDragToZoom: false,
|
||||
pinchToZoom: true,
|
||||
zoomToRefPoint: true,
|
||||
flickEnabled: true,
|
||||
@ -1248,6 +1265,7 @@ function OpenSeadragon( options ){
|
||||
},
|
||||
zoomPerClick: 2,
|
||||
zoomPerScroll: 1.2,
|
||||
zoomPerDblClickDrag: 1.2,
|
||||
zoomPerSecond: 1.0,
|
||||
blendTime: 0,
|
||||
alwaysBlend: false,
|
||||
|
@ -212,7 +212,9 @@ $.Viewer = function( options ) {
|
||||
zoomFactor: null,
|
||||
lastZoomTime: null,
|
||||
fullPage: false,
|
||||
onfullscreenchange: null
|
||||
onfullscreenchange: null,
|
||||
lastClickTime: null,
|
||||
draggingToZoom: false,
|
||||
};
|
||||
|
||||
this._sequenceIndex = 0;
|
||||
@ -2854,6 +2856,8 @@ function onCanvasKeyPress( event ) {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
function onCanvasClick( event ) {
|
||||
var gestureSettings;
|
||||
|
||||
@ -2893,17 +2897,31 @@ function onCanvasClick( event ) {
|
||||
* @property {Boolean} preventDefaultAction - Set to true to prevent default click to zoom behaviour. Default: false.
|
||||
* @property {?Object} userData - Arbitrary subscriber-defined object.
|
||||
*/
|
||||
|
||||
this.raiseEvent( 'canvas-click', canvasClickEventArgs);
|
||||
|
||||
|
||||
if ( !canvasClickEventArgs.preventDefaultAction && this.viewport && event.quick ) {
|
||||
gestureSettings = this.gestureSettingsByDeviceType( event.pointerType );
|
||||
if ( gestureSettings.clickToZoom ) {
|
||||
|
||||
if (gestureSettings.clickToZoom === true){
|
||||
this.viewport.zoomBy(
|
||||
event.shift ? 1.0 / this.zoomPerClick : this.zoomPerClick,
|
||||
gestureSettings.zoomToRefPoint ? this.viewport.pointFromPixel( event.position, true ) : null
|
||||
);
|
||||
this.viewport.applyConstraints();
|
||||
}
|
||||
|
||||
if( gestureSettings.dblClickDragToZoom){
|
||||
if(THIS[ this.hash ].draggingToZoom === true){
|
||||
THIS[ this.hash ].lastClickTime = null;
|
||||
THIS[ this.hash ].draggingToZoom = false;
|
||||
}
|
||||
else{
|
||||
THIS[ this.hash ].lastClickTime = $.now();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -2983,7 +3001,13 @@ function onCanvasDrag( event ) {
|
||||
|
||||
gestureSettings = this.gestureSettingsByDeviceType( event.pointerType );
|
||||
|
||||
if ( gestureSettings.dragToPan && !canvasDragEventArgs.preventDefaultAction && this.viewport ) {
|
||||
if(!canvasDragEventArgs.preventDefaultAction && this.viewport){
|
||||
|
||||
if (gestureSettings.dblClickDragToZoom && THIS[ this.hash ].draggingToZoom){
|
||||
var factor = Math.pow( this.zoomPerDblClickDrag, event.delta.y / 50);
|
||||
this.viewport.zoomBy(factor);
|
||||
}
|
||||
else if (gestureSettings.dragToPan && !THIS[ this.hash ].draggingToZoom) {
|
||||
if( !this.panHorizontal ){
|
||||
event.delta.x = 0;
|
||||
}
|
||||
@ -3014,12 +3038,15 @@ function onCanvasDrag( event ) {
|
||||
event.delta.y = 0;
|
||||
}
|
||||
}
|
||||
|
||||
this.viewport.panBy( this.viewport.deltaPointsFromPixels( event.delta.negate() ), gestureSettings.flickEnabled && !this.constrainDuringPan);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function onCanvasDragEnd( event ) {
|
||||
var gestureSettings;
|
||||
var canvasDragEndEventArgs = {
|
||||
tracker: event.eventSource,
|
||||
pointerType: event.pointerType,
|
||||
@ -3050,9 +3077,11 @@ function onCanvasDragEnd( event ) {
|
||||
*/
|
||||
this.raiseEvent('canvas-drag-end', canvasDragEndEventArgs);
|
||||
|
||||
gestureSettings = this.gestureSettingsByDeviceType( event.pointerType );
|
||||
|
||||
if (!canvasDragEndEventArgs.preventDefaultAction && this.viewport) {
|
||||
var gestureSettings = this.gestureSettingsByDeviceType(event.pointerType);
|
||||
if (gestureSettings.flickEnabled &&
|
||||
if ( !THIS[ this.hash ].draggingToZoom &&
|
||||
gestureSettings.flickEnabled &&
|
||||
event.speed >= gestureSettings.flickMinSpeed) {
|
||||
var amplitudeX = 0;
|
||||
if (this.panHorizontal) {
|
||||
@ -3072,6 +3101,13 @@ function onCanvasDragEnd( event ) {
|
||||
}
|
||||
this.viewport.applyConstraints();
|
||||
}
|
||||
|
||||
|
||||
if( gestureSettings.dblClickDragToZoom && THIS[ this.hash ].draggingToZoom === true ){
|
||||
THIS[ this.hash ].draggingToZoom = false;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
function onCanvasEnter( event ) {
|
||||
@ -3135,6 +3171,8 @@ function onCanvasLeave( event ) {
|
||||
}
|
||||
|
||||
function onCanvasPress( event ) {
|
||||
var gestureSettings;
|
||||
|
||||
/**
|
||||
* Raised when the primary mouse button is pressed or touch starts on the {@link OpenSeadragon.Viewer#canvas} element.
|
||||
*
|
||||
@ -3158,6 +3196,24 @@ function onCanvasPress( event ) {
|
||||
insideElementReleased: event.insideElementReleased,
|
||||
originalEvent: event.originalEvent
|
||||
});
|
||||
|
||||
|
||||
gestureSettings = this.gestureSettingsByDeviceType( event.pointerType );
|
||||
if ( gestureSettings.dblClickDragToZoom ){
|
||||
var lastClickTime = THIS[ this.hash ].lastClickTime;
|
||||
var currClickTime = $.now();
|
||||
|
||||
if ( lastClickTime === null) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ((currClickTime - lastClickTime) < this.dblClickTimeThreshold) {
|
||||
THIS[ this.hash ].draggingToZoom = true;
|
||||
}
|
||||
|
||||
THIS[ this.hash ].lastClickTime = null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function onCanvasRelease( event ) {
|
||||
|
Loading…
Reference in New Issue
Block a user