Skip to content

Commit

Permalink
fix(player): Fixed fill effect by using more CSS properties to enab…
Browse files Browse the repository at this point in the history
…le proper resizing using that effect
  • Loading branch information
rafa8626 committed Aug 7, 2018
1 parent ba14c93 commit 8112984
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 71 deletions.
45 changes: 12 additions & 33 deletions dist/openplayer.js
Original file line number Diff line number Diff line change
Expand Up @@ -850,37 +850,11 @@ var Player = function () {
}, {
key: "_fill",
value: function _fill() {
var _this5 = this;

if (general_1.isAudio(this.element)) {
return;
}
var isVisible = function isVisible(element) {
if (element.getClientRects !== undefined && typeof element.getClientRects === 'function') {
return !!(element.offsetWidth || element.offsetHeight || element.getClientRects().length);
}
return !!(element.offsetWidth || element.offsetHeight);
};
var parent = function () {
var parentEl = void 0;
var el = _this5.getContainer();
while (el) {
try {
if (constants_1.IS_FIREFOX && el.tagName.toLowerCase() === 'html' && window.self !== window.top && window.frameElement !== null) {
return window.frameElement;
} else {
parentEl = el.parentElement;
}
} catch (e) {
parentEl = el.parentElement;
}
if (parentEl && isVisible(parentEl)) {
return parentEl;
}
el = parentEl;
}
return null;
}();
var parentEl = this.getContainer().parentNode;
var parent = parentEl && parentEl.nodeType !== 11 ? parentEl : null;
if (!parent) {
return;
}
Expand All @@ -889,12 +863,17 @@ var Player = function () {
var viewportRatio = width / height;
var videoRatio = this.width / this.height;
var scale = 1;
if (videoRatio < viewportRatio) {
scale = viewportRatio / videoRatio;
} else if (viewportRatio < videoRatio) {
scale = videoRatio / viewportRatio;
var clip = void 0;
var transform = void 0;
if (viewportRatio > videoRatio) {
scale = width / this.width;
clip = this.width / viewportRatio;
transform = "scale(" + scale + ") translateY(" + -((this.height - clip) / this.height) + "px)";
} else {
scale = height / this.height;
clip = this.height / viewportRatio;
transform = "scale(" + scale + ") translateX(" + -((this.width - clip) / this.width) + "px)";
}
var transform = "translate(0, 0) scale(" + scale + ")";
this.element.style.transform = transform;
this.element.style.webkitTransform = transform;
if (this.isAd()) {
Expand Down
2 changes: 1 addition & 1 deletion dist/openplayer.min.js

Large diffs are not rendered by default.

50 changes: 13 additions & 37 deletions src/js/player.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import PlayerInstanceList from './interfaces/instance';
import Source from './interfaces/source';
import Media from './media';
import Ads from './media/ads';
import { IS_ANDROID, IS_FIREFOX, IS_IOS } from './utils/constants';
import { IS_ANDROID, IS_IOS } from './utils/constants';
import { addEvent } from './utils/events';
import { isAudio, isVideo } from './utils/general';
import { isAutoplaySupported } from './utils/media';
Expand Down Expand Up @@ -767,37 +767,8 @@ class Player {
return;
}

const isVisible = (element: HTMLElement) => {
if (element.getClientRects !== undefined && typeof element.getClientRects === 'function') {
return !!(element.offsetWidth || element.offsetHeight || element.getClientRects().length);
}
return !!(element.offsetWidth || element.offsetHeight);
};
const parent = (() => {
let parentEl;
let el = this.getContainer();

// traverse parents to find the closest visible one
while (el) {
try {
// Firefox has an issue calculating dimensions on hidden iframes
if (IS_FIREFOX && el.tagName.toLowerCase() === 'html' && window.self !== window.top && window.frameElement !== null) {
return window.frameElement;
} else {
parentEl = el.parentElement;
}
} catch (e) {
parentEl = el.parentElement;
}

if (parentEl && isVisible(parentEl)) {
return parentEl;
}
el = parentEl;
}

return null;
})();
const parentEl = this.getContainer().parentNode;
const parent = parentEl && parentEl.nodeType !== 11 ? parentEl : null;

if (!parent) {
return;
Expand All @@ -808,14 +779,19 @@ class Player {
const viewportRatio = width / height;
const videoRatio = this.width / this.height;
let scale = 1;
let clip;
let transform;

if (videoRatio < viewportRatio) {
scale = viewportRatio / videoRatio;
} else if (viewportRatio < videoRatio) {
scale = videoRatio / viewportRatio;
if (viewportRatio > videoRatio) {
scale = width / this.width;
clip = this.width / viewportRatio;
transform = `scale(${scale}) translateY(${-((this.height - clip) / this.height)}px)`;
} else {
scale = height / this.height;
clip = this.height / viewportRatio;
transform = `scale(${scale}) translateX(${-((this.width - clip) / this.width)}px)`;
}

const transform = `translate(0, 0) scale(${scale})`;
this.element.style.transform = transform;
this.element.style.webkitTransform = transform;

Expand Down

0 comments on commit 8112984

Please sign in to comment.