heartRenderer.activate();
window.addEventListener('resize', heartRenderer.resize.bind(heartRenderer));
+ window.addEventListener('blur', heartRenderer.stopFollowingMouse.bind(heartRenderer));
+ window.addEventListener('focus', heartRenderer.startFollowingMouse.bind(heartRenderer));
/**
* Exported global object. This will contain the instance of the heart
*/
this.heartSize = 50;
+ this._following = null; // The status of mouse follow.
+ this._center = null;
this._animating = false; // The status of the animation.
this._previousFrameTime = Date.now(); // The timestamp of the last frame for fps control
this._currentColor = { // The current color that will be painted
green: 50
};
+ this.startFollowingMouse();
+
Object.assign(this, config);
}
* @memberof HeartRenderer
* @function render
* @instance
- * @param {HTMLElement} element the element where we will attach our canvas
*/
resize() {
}
}
+ /**
+ * Follows the mouse
+ *
+ * @memberof HeartRenderer
+ * @function startFollowingMouse
+ * @instance
+ */
+ startFollowingMouse() {
+
+ if (!this._following) {
+ console.log('Start Following Mouse');
+ this._following = this._setCenterFromMouse.bind(this);
+ this.canvas.addEventListener('mousemove', this._following);
+ }
+ }
+
+ /**
+ * Stop following the mouse
+ *
+ * @memberof HeartRenderer
+ * @function stopFollowingMouse
+ * @instance
+ */
+ stopFollowingMouse() {
+
+ if (this._following) {
+ console.log('Stop Following Mouse');
+ this.canvas.removeEventListener('mouseover', this._following);
+ this._following = null;
+ this._center = null;
+ }
+ }
+
/**
* Gets the context from the current canvas and starts the animation process
*
const heartSize = Math.round(referenceDimension * this.heartSize * .01);
const radius = heartSize / 2;
- const canvasCenterX = Math.round(canvasWidth / 2);
- const canvasCenterY = Math.round(canvasHeight / 2);
+ let canvasCenterX = this._center ? this._center.x : Math.round(canvasWidth / 2);
+ let canvasCenterY = this._center ? this._center.y : Math.round(canvasHeight / 2);
const centerX = -radius;
const centerY = -radius;
context.setTransform(1, 0, 0, 1, 0, 0);
}
+
+ // Sets the center from mouse
+ _setCenterFromMouse (event) {
+ this._center = this._center || {};
+
+ console.log('tracking');
+
+ this._center.x = event.offsetX;
+ this._center.y = event.offsetY;
+ }
};