Here's the class:
function GestureCallback( element, endCallback, changeCallback ) {
this.element = element;
this.end_callback = endCallback;
this.change_callback = changeCallback;
this.scale = 1;
this.rotation = 0;
this.init();
}
GestureCallback.prototype.init = function() {
// scope functions for listener removal
var self = this;
this.gestureStart = function(e){ self.onGestureStart(e) };
this.gestureChange = function(e){ self.onGestureChange(e) };
this.gestureEnd = function(e){ self.onGestureEnd(e) };
// really no need to check for IE stupidness, but maybe they'll support gestures someday? oy.
if( this.element.attachEvent ) this.element.attachEvent( "touchstart", this.gestureStart ); else this.element.addEventListener( "touchstart", this.gestureStart, false );
if( this.element.attachEvent ) this.element.attachEvent( "gesturestart", this.gestureStart ); else this.element.addEventListener( "gesturestart", this.gestureStart, false );
};
GestureCallback.prototype.onGestureStart = function ( e ) {
if( this.element.attachEvent ) this.element.attachEvent( "gesturechange", this.gestureChange ); else this.element.addEventListener( "gesturechange", this.gestureChange, false );
if( this.element.attachEvent ) this.element.attachEvent( "gestureend", this.gestureEnd ); else this.element.addEventListener( "gestureend", this.gestureEnd, false );
};
GestureCallback.prototype.onGestureChange = function ( e ) {
this.scale = e.scale;
this.rotation = e.rotation;
if( this.change_callback ) this.change_callback( this.scale, this.rotation );
};
GestureCallback.prototype.onGestureEnd = function ( e ) {
if( this.element.detachEvent ) this.element.detachEvent( "gesturechange", this.gestureChange ); else this.element.removeEventListener( "gesturechange", this.gestureChange, false );
if( this.element.detachEvent ) this.element.detachEvent( "gestureend", this.gestureEnd ); else this.element.removeEventListener( "gestureend", this.gestureEnd, false );
this.scale = e.scale;
this.rotation = e.rotation;
if( this.end_callback ) this.end_callback( this.scale, this.rotation );
};
GestureCallback.prototype.dispose = function() {
if( this.element.attachEvent ) this.element.detachEvent( "touchstart", this.gestureStart ); else this.element.removeEventListener( "touchstart", this.gestureStart, false );
if( this.element.attachEvent ) this.element.detachEvent( "gesturestart", this.gestureStart ); else this.element.removeEventListener( "gesturestart", this.gestureStart, false );
this.element = null;
this.end_callback = null;
this.change_callback = null;
this.gestureStart = null;
this.gestureChange = null;
this.gestureEnd = null;
};
And the instantiation:var pinchCallback = new GestureCallback( yourElement, function( scale, rotation ){
console.log('done: '+scale+','+rotation);
if( scale < 1 ) {
// leave the section, since we've pinched it closed
}
}, function( scale, rotation ){
console.log('changing: '+scale+','+rotation);
});
And when you're done with your gesture needs, collect your garbage:
pinchCallback.dispose(); pinchCallback = null;
No comments:
Post a Comment