PIXI

Flickering issue with zoom

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/pixi.js/4.5.1/pixi.js"></script>

JavaScript

// Viewport class. Handles pan and zoom.
function ViewPort(){
	return this.init.apply(this, arguments);
}
ViewPort.prototype = {
	// Initiate our mandatory variables.
	init: function(options){
		// List of Containers that have zoom applied
		this.zoomLayers = options.zoomLayers;
		// PIXI.App ticker
		this.ticker = options.ticker;
		this.view = options.view;
		this.renderer = options.renderer;
		this.zoomListeners(options.smoothness, options.intensity);
	},
	// Set-up listeners for mouse wheel and add renderZoom to ticker
	zoomListeners: function(delta, power){
		this._remaining = 1;
		this._zooming = false;
		this._lastUpdate = 0;
		this._change = delta;
		var self = this;
		
		this.ticker.add(this.renderZoom, this, PIXI.UPDATE_PRIORITY.HIGH);
		this.view.addEventListener("wheel", function(e){
			var zoomIn = e.deltaY < 0 ? true : false; // Determine if zooming in or out
			var factor;
			if (zoomIn){
				factor = power;
			} else {
				factor = (1 / power);
			}
			self._remaining *= factor;
			// If we're not zooming, now may as well be a good time to start...
			if (!self._zooming){
				self._lastUpdate = Date.now();
				self._zooming = true;
			}
		})
	},
	// Render the zoom effect each frame
	renderZoom: function(deltaTime){
		if (!this._zooming){ return false}
		var self = this;
		function zoom(factor){
			var mouse = self.renderer.plugins.interaction.eventData.data.global;
			self.zoomLayers.forEach(function(layer){
				// Set the new scale values for each layer
				layer.scale.x *= factor;
				layer.scale.y *= factor;
				// Position the layers relative to the mouse postition
				layer.x -= (mouse.x - layer.x) * (factor - 1);
				layer.y -= (mouse.y - layer.y) * (factor -1);
			})
		}
			// Calculate the zoom factor
			var time = Date.now();
			var tDelta = (time - this._lastUpdate);
			this._lastUpdate = time;
			// Determine the amount of power left to zoom.
			var step = Math.pow(this._remaining, tDelta / 100);
			this._remaining /= step;
			// If...