679 lines
27 KiB
JavaScript
679 lines
27 KiB
JavaScript
(function (exports, Laya) {
|
|
'use strict';
|
|
|
|
class AccelerationInfo {
|
|
constructor() {
|
|
}
|
|
}
|
|
|
|
class RotationInfo {
|
|
constructor() {
|
|
}
|
|
}
|
|
|
|
class Accelerator extends Laya.EventDispatcher {
|
|
constructor(singleton) {
|
|
super();
|
|
this.onDeviceOrientationChange = this.onDeviceOrientationChange.bind(this);
|
|
}
|
|
static get instance() {
|
|
Accelerator._instance = Accelerator._instance || new Accelerator(0);
|
|
return Accelerator._instance;
|
|
}
|
|
on(type, caller, listener, args = null) {
|
|
super.on(type, caller, listener, args);
|
|
Laya.ILaya.Browser.window.addEventListener('devicemotion', this.onDeviceOrientationChange);
|
|
return this;
|
|
}
|
|
off(type, caller, listener, onceOnly = false) {
|
|
if (!this.hasListener(type))
|
|
Laya.ILaya.Browser.window.removeEventListener('devicemotion', this.onDeviceOrientationChange);
|
|
return super.off(type, caller, listener, onceOnly);
|
|
}
|
|
onDeviceOrientationChange(e) {
|
|
var interval = e.interval;
|
|
Accelerator.acceleration.x = e.acceleration.x;
|
|
Accelerator.acceleration.y = e.acceleration.y;
|
|
Accelerator.acceleration.z = e.acceleration.z;
|
|
Accelerator.accelerationIncludingGravity.x = e.accelerationIncludingGravity.x;
|
|
Accelerator.accelerationIncludingGravity.y = e.accelerationIncludingGravity.y;
|
|
Accelerator.accelerationIncludingGravity.z = e.accelerationIncludingGravity.z;
|
|
Accelerator.rotationRate.alpha = e.rotationRate.gamma * -1;
|
|
Accelerator.rotationRate.beta = e.rotationRate.alpha * -1;
|
|
Accelerator.rotationRate.gamma = e.rotationRate.beta;
|
|
if (Laya.ILaya.Browser.onAndroid) {
|
|
if (Laya.ILaya.Browser.userAgent.indexOf("Chrome") > -1) {
|
|
Accelerator.rotationRate.alpha *= 180 / Math.PI;
|
|
Accelerator.rotationRate.beta *= 180 / Math.PI;
|
|
Accelerator.rotationRate.gamma *= 180 / Math.PI;
|
|
}
|
|
Accelerator.acceleration.x *= -1;
|
|
Accelerator.accelerationIncludingGravity.x *= -1;
|
|
}
|
|
else if (Laya.ILaya.Browser.onIOS) {
|
|
Accelerator.acceleration.y *= -1;
|
|
Accelerator.acceleration.z *= -1;
|
|
Accelerator.accelerationIncludingGravity.y *= -1;
|
|
Accelerator.accelerationIncludingGravity.z *= -1;
|
|
interval *= 1000;
|
|
}
|
|
this.event(Laya.Event.CHANGE, [Accelerator.acceleration, Accelerator.accelerationIncludingGravity, Accelerator.rotationRate, interval]);
|
|
}
|
|
static getTransformedAcceleration(acceleration) {
|
|
Accelerator.transformedAcceleration = Accelerator.transformedAcceleration || new AccelerationInfo();
|
|
Accelerator.transformedAcceleration.z = acceleration.z;
|
|
if (Laya.ILaya.Browser.window.orientation == 90) {
|
|
Accelerator.transformedAcceleration.x = acceleration.y;
|
|
Accelerator.transformedAcceleration.y = -acceleration.x;
|
|
}
|
|
else if (Laya.ILaya.Browser.window.orientation == -90) {
|
|
Accelerator.transformedAcceleration.x = -acceleration.y;
|
|
Accelerator.transformedAcceleration.y = acceleration.x;
|
|
}
|
|
else if (!Laya.ILaya.Browser.window.orientation) {
|
|
Accelerator.transformedAcceleration.x = acceleration.x;
|
|
Accelerator.transformedAcceleration.y = acceleration.y;
|
|
}
|
|
else if (Laya.ILaya.Browser.window.orientation == 180) {
|
|
Accelerator.transformedAcceleration.x = -acceleration.x;
|
|
Accelerator.transformedAcceleration.y = -acceleration.y;
|
|
}
|
|
var tx;
|
|
if (Laya.ILaya.stage.canvasDegree == -90) {
|
|
tx = Accelerator.transformedAcceleration.x;
|
|
Accelerator.transformedAcceleration.x = -Accelerator.transformedAcceleration.y;
|
|
Accelerator.transformedAcceleration.y = tx;
|
|
}
|
|
else if (Laya.ILaya.stage.canvasDegree == 90) {
|
|
tx = Accelerator.transformedAcceleration.x;
|
|
Accelerator.transformedAcceleration.x = Accelerator.transformedAcceleration.y;
|
|
Accelerator.transformedAcceleration.y = -tx;
|
|
}
|
|
return Accelerator.transformedAcceleration;
|
|
}
|
|
}
|
|
Accelerator.acceleration = new AccelerationInfo();
|
|
Accelerator.accelerationIncludingGravity = new AccelerationInfo();
|
|
Accelerator.rotationRate = new RotationInfo();
|
|
|
|
class Shake extends Laya.EventDispatcher {
|
|
constructor() {
|
|
super();
|
|
}
|
|
static get instance() {
|
|
Shake._instance = Shake._instance || new Shake();
|
|
return Shake._instance;
|
|
}
|
|
start(throushold, interval) {
|
|
this.throushold = throushold;
|
|
this.shakeInterval = interval;
|
|
this.lastX = this.lastY = this.lastZ = NaN;
|
|
Accelerator.instance.on(Laya.Event.CHANGE, this, this.onShake);
|
|
}
|
|
stop() {
|
|
Accelerator.instance.off(Laya.Event.CHANGE, this, this.onShake);
|
|
}
|
|
onShake(acceleration, accelerationIncludingGravity, rotationRate, interval) {
|
|
if (isNaN(this.lastX)) {
|
|
this.lastX = accelerationIncludingGravity.x;
|
|
this.lastY = accelerationIncludingGravity.y;
|
|
this.lastZ = accelerationIncludingGravity.z;
|
|
this.lastMillSecond = Laya.ILaya.Browser.now();
|
|
return;
|
|
}
|
|
var deltaX = Math.abs(this.lastX - accelerationIncludingGravity.x);
|
|
var deltaY = Math.abs(this.lastY - accelerationIncludingGravity.y);
|
|
var deltaZ = Math.abs(this.lastZ - accelerationIncludingGravity.z);
|
|
if (this.isShaked(deltaX, deltaY, deltaZ)) {
|
|
var deltaMillSecond = Laya.ILaya.Browser.now() - this.lastMillSecond;
|
|
if (deltaMillSecond > this.shakeInterval) {
|
|
this.event(Laya.Event.CHANGE);
|
|
this.lastMillSecond = Laya.ILaya.Browser.now();
|
|
}
|
|
}
|
|
this.lastX = accelerationIncludingGravity.x;
|
|
this.lastY = accelerationIncludingGravity.y;
|
|
this.lastZ = accelerationIncludingGravity.z;
|
|
}
|
|
isShaked(deltaX, deltaY, deltaZ) {
|
|
return (deltaX > this.throushold && deltaY > this.throushold) ||
|
|
(deltaX > this.throushold && deltaZ > this.throushold) ||
|
|
(deltaY > this.throushold && deltaZ > this.throushold);
|
|
}
|
|
}
|
|
|
|
class GeolocationInfo {
|
|
setPosition(pos) {
|
|
this.pos = pos;
|
|
this.coords = pos.coords;
|
|
}
|
|
get latitude() {
|
|
return this.coords.latitude;
|
|
}
|
|
get longitude() {
|
|
return this.coords.longitude;
|
|
}
|
|
get altitude() {
|
|
return this.coords.altitude;
|
|
}
|
|
get accuracy() {
|
|
return this.coords.accuracy;
|
|
}
|
|
get altitudeAccuracy() {
|
|
return this.coords.altitudeAccuracy;
|
|
}
|
|
get heading() {
|
|
return this.coords.heading;
|
|
}
|
|
get speed() {
|
|
return this.coords.speed;
|
|
}
|
|
get timestamp() {
|
|
return this.pos.timestamp;
|
|
}
|
|
}
|
|
|
|
class Geolocation {
|
|
constructor() {
|
|
}
|
|
static getCurrentPosition(onSuccess, onError = null) {
|
|
Geolocation.navigator.geolocation.getCurrentPosition(function (pos) {
|
|
Geolocation.position.setPosition(pos);
|
|
onSuccess.runWith(Geolocation.position);
|
|
}, function (error) {
|
|
onError.runWith(error);
|
|
}, {
|
|
enableHighAccuracy: Geolocation.enableHighAccuracy,
|
|
timeout: Geolocation.timeout,
|
|
maximumAge: Geolocation.maximumAge
|
|
});
|
|
}
|
|
static watchPosition(onSuccess, onError) {
|
|
return Geolocation.navigator.geolocation.watchPosition(function (pos) {
|
|
Geolocation.position.setPosition(pos);
|
|
onSuccess.runWith(Geolocation.position);
|
|
}, function (error) {
|
|
onError.runWith(error);
|
|
}, {
|
|
enableHighAccuracy: Geolocation.enableHighAccuracy,
|
|
timeout: Geolocation.timeout,
|
|
maximumAge: Geolocation.maximumAge
|
|
});
|
|
}
|
|
static clearWatch(id) {
|
|
Geolocation.navigator.geolocation.clearWatch(id);
|
|
}
|
|
}
|
|
Geolocation.navigator = navigator;
|
|
Geolocation.position = new GeolocationInfo();
|
|
Geolocation.PERMISSION_DENIED = 1;
|
|
Geolocation.POSITION_UNAVAILABLE = 2;
|
|
Geolocation.TIMEOUT = 3;
|
|
Geolocation.supported = !!Geolocation.navigator.geolocation;
|
|
Geolocation.enableHighAccuracy = false;
|
|
Geolocation.timeout = 1E10;
|
|
Geolocation.maximumAge = 0;
|
|
|
|
class HtmlVideo extends Laya.Bitmap {
|
|
constructor() {
|
|
super();
|
|
this._w = 0;
|
|
this._h = 0;
|
|
this._width = 1;
|
|
this._height = 1;
|
|
this.createDomElement();
|
|
}
|
|
createDomElement() {
|
|
this._source = this.video = Laya.ILaya.Browser.createElement("video");
|
|
var style = this.video.style;
|
|
style.position = 'absolute';
|
|
style.top = '0px';
|
|
style.left = '0px';
|
|
this.video.addEventListener("loadedmetadata", () => {
|
|
this._w = this.video.videoWidth;
|
|
this._h = this.video.videoHeight;
|
|
});
|
|
}
|
|
setSource(url, extension) {
|
|
while (this.video.childElementCount)
|
|
this.video.firstChild.remove();
|
|
if (extension & 1)
|
|
this.appendSource(url, "video/mp4");
|
|
if (extension & 2)
|
|
this.appendSource(url + ".ogg", "video/ogg");
|
|
}
|
|
appendSource(source, type) {
|
|
var sourceElement = Laya.ILaya.Browser.createElement("source");
|
|
sourceElement.src = source;
|
|
sourceElement.type = type;
|
|
this.video.appendChild(sourceElement);
|
|
}
|
|
getVideo() {
|
|
return this.video;
|
|
}
|
|
_getSource() {
|
|
return this._source;
|
|
}
|
|
destroy() {
|
|
super.destroy();
|
|
var isConchApp = Laya.ILaya.Render.isConchApp;
|
|
if (isConchApp) {
|
|
this.video._destroy();
|
|
}
|
|
}
|
|
}
|
|
HtmlVideo.create = function () {
|
|
return new HtmlVideo();
|
|
};
|
|
|
|
class Media {
|
|
constructor() {
|
|
}
|
|
static supported() {
|
|
return !!Laya.ILaya.Browser.window.navigator.getUserMedia;
|
|
}
|
|
static getMedia(options, onSuccess, onError) {
|
|
if (Laya.ILaya.Browser.window.navigator.getUserMedia) {
|
|
Laya.ILaya.Browser.window.navigator.getUserMedia(options, function (stream) {
|
|
onSuccess.runWith(Laya.ILaya.Browser.window.URL.createObjectURL(stream));
|
|
}, function (err) {
|
|
onError.runWith(err);
|
|
});
|
|
}
|
|
}
|
|
}
|
|
|
|
class WebGLVideo extends HtmlVideo {
|
|
constructor() {
|
|
super();
|
|
var gl = Laya.LayaGL.instance;
|
|
this.gl = Laya.ILaya.Render.isConchApp ? window.LayaGLContext.instance : Laya.WebGLContext.mainContext;
|
|
this._source = this.gl.createTexture();
|
|
Laya.WebGLContext.bindTexture(this.gl, gl.TEXTURE_2D, this._source);
|
|
this.gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
|
|
this.gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
|
|
this.gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
|
|
this.gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
|
|
Laya.WebGLContext.bindTexture(this.gl, gl.TEXTURE_2D, null);
|
|
}
|
|
updateTexture() {
|
|
var gl = Laya.LayaGL.instance;
|
|
Laya.WebGLContext.bindTexture(this.gl, gl.TEXTURE_2D, this._source);
|
|
this.gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true);
|
|
this.gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGB, gl.RGB, gl.UNSIGNED_BYTE, this.video);
|
|
this.gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false);
|
|
WebGLVideo.curBindSource = this._source;
|
|
}
|
|
get _glTexture() {
|
|
return this._source;
|
|
}
|
|
destroy() {
|
|
if (this._source) {
|
|
this.gl = Laya.ILaya.Render.isConchApp ? window.LayaGLContext.instance : Laya.WebGLContext.mainContext;
|
|
if (this.gl) {
|
|
if (WebGLVideo.curBindSource == this._source) {
|
|
Laya.WebGLContext.bindTexture(this.gl, this.gl.TEXTURE_2D, null);
|
|
WebGLVideo.curBindSource = null;
|
|
}
|
|
this.gl.deleteTexture(this._source);
|
|
}
|
|
}
|
|
super.destroy();
|
|
}
|
|
}
|
|
|
|
class Video extends Laya.Sprite {
|
|
constructor(width = 320, height = 240) {
|
|
super();
|
|
this.htmlVideo = new WebGLVideo();
|
|
this.videoElement = this.htmlVideo.getVideo();
|
|
this.videoElement.layaTarget = this;
|
|
this.internalTexture = new Laya.Texture(this.htmlVideo);
|
|
this.videoElement.addEventListener("abort", Video.onAbort);
|
|
this.videoElement.addEventListener("canplay", Video.onCanplay);
|
|
this.videoElement.addEventListener("canplaythrough", Video.onCanplaythrough);
|
|
this.videoElement.addEventListener("durationchange", Video.onDurationchange);
|
|
this.videoElement.addEventListener("emptied", Video.onEmptied);
|
|
this.videoElement.addEventListener("error", Video.onError);
|
|
this.videoElement.addEventListener("loadeddata", Video.onLoadeddata);
|
|
this.videoElement.addEventListener("loadedmetadata", Video.onLoadedmetadata);
|
|
this.videoElement.addEventListener("loadstart", Video.onLoadstart);
|
|
this.videoElement.addEventListener("pause", Video.onPause);
|
|
this.videoElement.addEventListener("play", Video.onPlay);
|
|
this.videoElement.addEventListener("playing", Video.onPlaying);
|
|
this.videoElement.addEventListener("progress", Video.onProgress);
|
|
this.videoElement.addEventListener("ratechange", Video.onRatechange);
|
|
this.videoElement.addEventListener("seeked", Video.onSeeked);
|
|
this.videoElement.addEventListener("seeking", Video.onSeeking);
|
|
this.videoElement.addEventListener("stalled", Video.onStalled);
|
|
this.videoElement.addEventListener("suspend", Video.onSuspend);
|
|
this.videoElement.addEventListener("timeupdate", Video.onTimeupdate);
|
|
this.videoElement.addEventListener("volumechange", Video.onVolumechange);
|
|
this.videoElement.addEventListener("waiting", Video.onWaiting);
|
|
this.videoElement.addEventListener("ended", this.onPlayComplete['bind'](this));
|
|
this.size(width, height);
|
|
if (Laya.ILaya.Browser.onMobile) {
|
|
this.videoElement["x5-playsInline"] = true;
|
|
this.videoElement["x5-playsinline"] = true;
|
|
this.videoElement.x5PlaysInline = true;
|
|
this.videoElement.playsInline = true;
|
|
this.videoElement["webkit-playsInline"] = true;
|
|
this.videoElement["webkit-playsinline"] = true;
|
|
this.videoElement.webkitPlaysInline = true;
|
|
this.videoElement.playsinline = true;
|
|
this.videoElement.style.playsInline = true;
|
|
this.videoElement.crossOrigin = "anonymous";
|
|
this.videoElement.setAttribute('crossorigin', "anonymous");
|
|
this.videoElement.setAttribute('playsinline', 'true');
|
|
this.videoElement.setAttribute('x5-playsinline', 'true');
|
|
this.videoElement.setAttribute('webkit-playsinline', 'true');
|
|
this.videoElement.autoplay = true;
|
|
this._clickhandle = this.onDocumentClick.bind(this);
|
|
Laya.ILaya.Browser.document.addEventListener("touchend", this._clickhandle);
|
|
}
|
|
}
|
|
static onAbort(e) { e.target.layaTarget.event("abort"); }
|
|
static onCanplay(e) { e.target.layaTarget.event("canplay"); }
|
|
static onCanplaythrough(e) { e.target.layaTarget.event("canplaythrough"); }
|
|
static onDurationchange(e) { e.target.layaTarget.event("durationchange"); }
|
|
static onEmptied(e) { e.target.layaTarget.event("emptied"); }
|
|
static onError(e) { e.target.layaTarget.event("error"); }
|
|
static onLoadeddata(e) { e.target.layaTarget.event("loadeddata"); }
|
|
static onLoadedmetadata(e) { e.target.layaTarget.event("loadedmetadata"); }
|
|
static onLoadstart(e) { e.target.layaTarget.event("loadstart"); }
|
|
static onPause(e) { e.target.layaTarget.event("pause"); }
|
|
static onPlay(e) { e.target.layaTarget.event("play"); }
|
|
static onPlaying(e) { e.target.layaTarget.event("playing"); }
|
|
static onProgress(e) { e.target.layaTarget.event("progress"); }
|
|
static onRatechange(e) { e.target.layaTarget.event("ratechange"); }
|
|
static onSeeked(e) { e.target.layaTarget.event("seeked"); }
|
|
static onSeeking(e) { e.target.layaTarget.event("seeking"); }
|
|
static onStalled(e) { e.target.layaTarget.event("stalled"); }
|
|
static onSuspend(e) { e.target.layaTarget.event("suspend"); }
|
|
static onTimeupdate(e) { e.target.layaTarget.event("timeupdate"); }
|
|
static onVolumechange(e) { e.target.layaTarget.event("volumechange"); }
|
|
static onWaiting(e) { e.target.layaTarget.event("waiting"); }
|
|
onPlayComplete(e) {
|
|
if (!Laya.ILaya.Render.isConchApp || !this.videoElement || !this.videoElement.loop)
|
|
Laya.ILaya.timer.clear(this, this.renderCanvas);
|
|
this.event("ended");
|
|
}
|
|
load(url) {
|
|
if (url.indexOf("blob:") == 0)
|
|
this.videoElement.src = url;
|
|
else
|
|
this.htmlVideo.setSource(url, 1);
|
|
}
|
|
play() {
|
|
this.videoElement.play();
|
|
Laya.ILaya.timer.frameLoop(1, this, this.renderCanvas);
|
|
}
|
|
pause() {
|
|
this.videoElement.pause();
|
|
Laya.ILaya.timer.clear(this, this.renderCanvas);
|
|
}
|
|
reload() {
|
|
this.videoElement.load();
|
|
}
|
|
canPlayType(type) {
|
|
var typeString;
|
|
switch (type) {
|
|
case 1:
|
|
typeString = "video/mp4";
|
|
break;
|
|
case 2:
|
|
typeString = "video/ogg";
|
|
break;
|
|
case 8:
|
|
typeString = "video/webm";
|
|
break;
|
|
}
|
|
return this.videoElement.canPlayType(typeString);
|
|
}
|
|
renderCanvas() {
|
|
if (this.readyState === 0)
|
|
return;
|
|
this.htmlVideo['updateTexture']();
|
|
this.graphics.clear();
|
|
this.graphics.drawTexture(this.internalTexture, 0, 0, this.width, this.height);
|
|
}
|
|
onDocumentClick() {
|
|
if (!this.videoElement || this.videoElement != 0)
|
|
return;
|
|
if (Laya.Browser.onIOS) {
|
|
this.videoElement.load();
|
|
}
|
|
else {
|
|
this.videoElement.play();
|
|
this.videoElement.pause();
|
|
}
|
|
Laya.ILaya.Browser.document.removeEventListener("touchend", this._clickhandle);
|
|
}
|
|
get buffered() {
|
|
return this.videoElement.buffered;
|
|
}
|
|
get currentSrc() {
|
|
return this.videoElement.currentSrc;
|
|
}
|
|
get currentTime() {
|
|
return this.videoElement.currentTime;
|
|
}
|
|
set currentTime(value) {
|
|
this.videoElement.currentTime = value;
|
|
this.renderCanvas();
|
|
}
|
|
set volume(value) {
|
|
this.videoElement.volume = value;
|
|
}
|
|
get volume() {
|
|
return this.videoElement.volume;
|
|
}
|
|
get readyState() {
|
|
return this.videoElement.readyState;
|
|
}
|
|
get videoWidth() {
|
|
return this.videoElement.videoWidth;
|
|
}
|
|
get videoHeight() {
|
|
return this.videoElement.videoHeight;
|
|
}
|
|
get duration() {
|
|
return this.videoElement.duration;
|
|
}
|
|
get ended() {
|
|
return this.videoElement.ended;
|
|
}
|
|
get error() {
|
|
return this.videoElement.error;
|
|
}
|
|
get loop() {
|
|
return this.videoElement.loop;
|
|
}
|
|
set loop(value) {
|
|
this.videoElement.loop = value;
|
|
}
|
|
set x(val) {
|
|
super.x = val;
|
|
if (Laya.ILaya.Render.isConchApp) {
|
|
var transform = Laya.ILaya.Utils.getTransformRelativeToWindow(this, 0, 0);
|
|
this.videoElement.style.left = transform.x;
|
|
}
|
|
}
|
|
get x() {
|
|
return super.x;
|
|
}
|
|
set y(val) {
|
|
super.y = val;
|
|
if (Laya.ILaya.Render.isConchApp) {
|
|
var transform = Laya.ILaya.Utils.getTransformRelativeToWindow(this, 0, 0);
|
|
this.videoElement.style.top = transform.y;
|
|
}
|
|
}
|
|
get y() {
|
|
return super.y;
|
|
}
|
|
get playbackRate() {
|
|
return this.videoElement.playbackRate;
|
|
}
|
|
set playbackRate(value) {
|
|
this.videoElement.playbackRate = value;
|
|
}
|
|
get muted() {
|
|
return this.videoElement.muted;
|
|
}
|
|
set muted(value) {
|
|
this.videoElement.muted = value;
|
|
}
|
|
get paused() {
|
|
return this.videoElement.paused;
|
|
}
|
|
get preload() {
|
|
return this.videoElement.preload;
|
|
}
|
|
set preload(value) {
|
|
this.videoElement.preload = value;
|
|
}
|
|
get seekable() {
|
|
return this.videoElement.seekable;
|
|
}
|
|
get seeking() {
|
|
return this.videoElement.seeking;
|
|
}
|
|
size(width, height) {
|
|
super.size(width, height);
|
|
if (Laya.ILaya.Render.isConchApp) {
|
|
var transform = Laya.ILaya.Utils.getTransformRelativeToWindow(this, 0, 0);
|
|
this.videoElement.width = width * transform.scaleX;
|
|
}
|
|
else {
|
|
this.videoElement.width = width / Laya.ILaya.Browser.pixelRatio;
|
|
this.videoElement.height = height / Laya.Browser.pixelRatio;
|
|
}
|
|
if (this.paused)
|
|
this.renderCanvas();
|
|
return this;
|
|
}
|
|
set width(value) {
|
|
if (Laya.ILaya.Render.isConchApp) {
|
|
var transform = Laya.ILaya.Utils.getTransformRelativeToWindow(this, 0, 0);
|
|
this.videoElement.width = value * transform.scaleX;
|
|
}
|
|
else {
|
|
this.videoElement.width = this.width / Laya.ILaya.Browser.pixelRatio;
|
|
}
|
|
super.width = value;
|
|
if (this.paused)
|
|
this.renderCanvas();
|
|
}
|
|
get width() {
|
|
return super.width;
|
|
}
|
|
set height(value) {
|
|
if (Laya.ILaya.Render.isConchApp) {
|
|
var transform = Laya.ILaya.Utils.getTransformRelativeToWindow(this, 0, 0);
|
|
this.videoElement.height = value * transform.scaleY;
|
|
}
|
|
else {
|
|
this.videoElement.height = this.height / Laya.ILaya.Browser.pixelRatio;
|
|
}
|
|
super.height = value;
|
|
}
|
|
get height() {
|
|
return super.height;
|
|
}
|
|
destroy(detroyChildren = true) {
|
|
super.destroy(detroyChildren);
|
|
this.videoElement.removeEventListener("abort", Video.onAbort);
|
|
this.videoElement.removeEventListener("canplay", Video.onCanplay);
|
|
this.videoElement.removeEventListener("canplaythrough", Video.onCanplaythrough);
|
|
this.videoElement.removeEventListener("durationchange", Video.onDurationchange);
|
|
this.videoElement.removeEventListener("emptied", Video.onEmptied);
|
|
this.videoElement.removeEventListener("error", Video.onError);
|
|
this.videoElement.removeEventListener("loadeddata", Video.onLoadeddata);
|
|
this.videoElement.removeEventListener("loadedmetadata", Video.onLoadedmetadata);
|
|
this.videoElement.removeEventListener("loadstart", Video.onLoadstart);
|
|
this.videoElement.removeEventListener("pause", Video.onPause);
|
|
this.videoElement.removeEventListener("play", Video.onPlay);
|
|
this.videoElement.removeEventListener("playing", Video.onPlaying);
|
|
this.videoElement.removeEventListener("progress", Video.onProgress);
|
|
this.videoElement.removeEventListener("ratechange", Video.onRatechange);
|
|
this.videoElement.removeEventListener("seeked", Video.onSeeked);
|
|
this.videoElement.removeEventListener("seeking", Video.onSeeking);
|
|
this.videoElement.removeEventListener("stalled", Video.onStalled);
|
|
this.videoElement.removeEventListener("suspend", Video.onSuspend);
|
|
this.videoElement.removeEventListener("timeupdate", Video.onTimeupdate);
|
|
this.videoElement.removeEventListener("volumechange", Video.onVolumechange);
|
|
this.videoElement.removeEventListener("waiting", Video.onWaiting);
|
|
this.videoElement.removeEventListener("ended", this.onPlayComplete);
|
|
this.pause();
|
|
this.videoElement.layaTarget = null;
|
|
this.videoElement = null;
|
|
this.htmlVideo.destroy();
|
|
}
|
|
syncVideoPosition() {
|
|
var stage = Laya.ILaya.stage;
|
|
var rec;
|
|
rec = Laya.ILaya.Utils.getGlobalPosAndScale(this);
|
|
var a = stage._canvasTransform.a, d = stage._canvasTransform.d;
|
|
var x = rec.x * stage.clientScaleX * a + stage.offset.x;
|
|
var y = rec.y * stage.clientScaleY * d + stage.offset.y;
|
|
this.videoElement.style.left = x + 'px';
|
|
this.videoElement.style.top = y + 'px';
|
|
this.videoElement.width = this.width / Laya.ILaya.Browser.pixelRatio;
|
|
this.videoElement.height = this.height / Laya.ILaya.Browser.pixelRatio;
|
|
}
|
|
}
|
|
Video.MP4 = 1;
|
|
Video.OGG = 2;
|
|
Video.CAMERA = 4;
|
|
Video.WEBM = 8;
|
|
Video.SUPPORT_PROBABLY = "probably";
|
|
Video.SUPPORT_MAYBY = "maybe";
|
|
Video.SUPPORT_NO = "";
|
|
|
|
class Gyroscope extends Laya.EventDispatcher {
|
|
constructor(singleton) {
|
|
super();
|
|
this.onDeviceOrientationChange = this.onDeviceOrientationChange.bind(this);
|
|
}
|
|
static get instance() {
|
|
Gyroscope._instance = Gyroscope._instance || new Gyroscope(0);
|
|
return Gyroscope._instance;
|
|
}
|
|
on(type, caller, listener, args = null) {
|
|
super.on(type, caller, listener, args);
|
|
Laya.ILaya.Browser.window.addEventListener('deviceorientation', this.onDeviceOrientationChange);
|
|
return this;
|
|
}
|
|
off(type, caller, listener, onceOnly = false) {
|
|
if (!this.hasListener(type))
|
|
Laya.ILaya.Browser.window.removeEventListener('deviceorientation', this.onDeviceOrientationChange);
|
|
return super.off(type, caller, listener, onceOnly);
|
|
}
|
|
onDeviceOrientationChange(e) {
|
|
Gyroscope.info.alpha = e.alpha;
|
|
Gyroscope.info.beta = e.beta;
|
|
Gyroscope.info.gamma = e.gamma;
|
|
if (e.webkitCompassHeading) {
|
|
Gyroscope.info.alpha = e.webkitCompassHeading * -1;
|
|
Gyroscope.info.compassAccuracy = e.webkitCompassAccuracy;
|
|
}
|
|
this.event(Laya.Event.CHANGE, [e.absolute, Gyroscope.info]);
|
|
}
|
|
}
|
|
Gyroscope.info = new RotationInfo();
|
|
|
|
exports.AccelerationInfo = AccelerationInfo;
|
|
exports.Accelerator = Accelerator;
|
|
exports.Geolocation = Geolocation;
|
|
exports.GeolocationInfo = GeolocationInfo;
|
|
exports.Gyroscope = Gyroscope;
|
|
exports.HtmlVideo = HtmlVideo;
|
|
exports.Media = Media;
|
|
exports.RotationInfo = RotationInfo;
|
|
exports.Shake = Shake;
|
|
exports.Video = Video;
|
|
exports.WebGLVideo = WebGLVideo;
|
|
|
|
}(window.Laya = window.Laya || {}, Laya));
|