1
0
mirror of https://github.com/videojs/video.js.git synced 2025-07-03 00:57:02 +02:00

feat: playerresize event on Player dimension API calls (#4800)

Trigger a `playerresize` event when `width()`, `height()`, or `dimensions()` is called.

First part of #4629.
This commit is contained in:
sivapalan
2017-12-14 23:33:29 +01:00
committed by Gary Katsevman
parent ba0f20ec35
commit e0ed0b5cd7
2 changed files with 56 additions and 5 deletions

View File

@ -661,11 +661,14 @@ class Player extends Component {
* @param {number} [value] * @param {number} [value]
* The value to set the `Player`'s width to. * The value to set the `Player`'s width to.
* *
* @param {boolean} [skipListeners]
* Skip the playerresize event trigger
*
* @return {number} * @return {number}
* The current width of the `Player` when getting. * The current width of the `Player` when getting.
*/ */
width(value) { width(value, skipListeners) {
return this.dimension('width', value); return this.dimension('width', value, skipListeners);
} }
/** /**
@ -675,16 +678,21 @@ class Player extends Component {
* @param {number} [value] * @param {number} [value]
* The value to set the `Player`'s heigth to. * The value to set the `Player`'s heigth to.
* *
* @param {boolean} [skipListeners]
* Skip the playerresize event trigger
*
* @return {number} * @return {number}
* The current height of the `Player` when getting. * The current height of the `Player` when getting.
*/ */
height(value) { height(value, skipListeners) {
return this.dimension('height', value); return this.dimension('height', value, skipListeners);
} }
/** /**
* A getter/setter for the `Player`'s width & height. * A getter/setter for the `Player`'s width & height.
* *
* @fires Player#playerresize
*
* @param {string} dimension * @param {string} dimension
* This string can be: * This string can be:
* - 'width' * - 'width'
@ -693,10 +701,13 @@ class Player extends Component {
* @param {number} [value] * @param {number} [value]
* Value for dimension specified in the first argument. * Value for dimension specified in the first argument.
* *
* @param {boolean} [skipListeners]
* Skip the playerresize event trigger
*
* @return {number} * @return {number}
* The dimension arguments value when getting (width/height). * The dimension arguments value when getting (width/height).
*/ */
dimension(dimension, value) { dimension(dimension, value, skipListeners) {
const privDimension = dimension + '_'; const privDimension = dimension + '_';
if (value === undefined) { if (value === undefined) {
@ -719,6 +730,17 @@ class Player extends Component {
this[privDimension] = parsedVal; this[privDimension] = parsedVal;
this.updateStyleEl_(); this.updateStyleEl_();
// skipListeners allows us to avoid triggering the resize event when setting both width and height
if (this.isReady_ && !skipListeners) {
/**
* Triggered when the player is resized.
*
* @event Player#playerresize
* @type {EventTarget~Event}
*/
this.trigger('playerresize');
}
} }
/** /**

View File

@ -1709,3 +1709,32 @@ QUnit.test('player.duration() sets the value of player.cache_.duration', functio
player.duration(200); player.duration(200);
assert.equal(player.duration(), 200, 'duration() set and get integer duration value'); assert.equal(player.duration(), 200, 'duration() set and get integer duration value');
}); });
QUnit.test('should fire playerresize when player is resized', function(assert) {
assert.expect(2);
const player = TestHelpers.makePlayer();
player.on('playerresize', function() {
assert.ok(true, 'playerresize fired');
});
player.width(400);
player.height(300);
player.dispose();
});
QUnit.test('should fire playerresize exactly once for a two-dimensional resize', function(assert) {
assert.expect(1);
const player = TestHelpers.makePlayer();
player.on('playerresize', function() {
assert.ok(true, 'playerresize fired once');
});
player.dimensions(400, 300);
player.dispose();
});