@tarojs/taro-h5
Version:
Taro h5 framework
79 lines (76 loc) • 3.2 kB
JavaScript
import { temporarilyNotSupport, findDOM, shouldBeObject } from '../../../utils/index.js';
import { MethodHandler } from '../../../utils/handler.js';
// 视频
const saveVideoToPhotosAlbum = temporarilyNotSupport('saveVideoToPhotosAlbum');
const openVideoEditor = temporarilyNotSupport('openVideoEditor');
const getVideoInfo = temporarilyNotSupport('getVideoInfo');
/**
* 创建 video 上下文 VideoContext 对象。
*/
const createVideoContext = (id, inst) => {
const el = findDOM(inst);
// TODO HTMLVideoElement to VideoContext
return el === null || el === void 0 ? void 0 : el.querySelector(`taro-video-core[id=${id}]`);
};
const compressVideo = temporarilyNotSupport('compressVideo');
/**
* 拍摄视频或从手机相册中选视频。
*/
const chooseVideo = (options) => {
// options must be an Object
const isObject = shouldBeObject(options);
if (!isObject.flag) {
const res = { errMsg: `chooseVideo:fail ${isObject.msg}` };
console.error(res.errMsg);
return Promise.reject(res);
}
const { success, fail, complete } = options;
const handle = new MethodHandler({ name: 'chooseVideo', success, fail, complete });
const res = {
tempFilePath: '',
duration: 0,
size: 0,
height: 0,
width: 0
};
const inputEl = document.createElement('input');
inputEl.setAttribute('type', 'file');
inputEl.setAttribute('multiple', 'multiple');
inputEl.setAttribute('accept', 'video/*');
inputEl.setAttribute('style', 'position: fixed; top: -4000px; left: -3000px; z-index: -300;');
document.body.appendChild(inputEl);
return new Promise((resolve, reject) => {
const TaroMouseEvents = document.createEvent('MouseEvents');
TaroMouseEvents.initEvent('click', true, true);
inputEl.dispatchEvent(TaroMouseEvents);
inputEl.onchange = function (e) {
var _a;
const target = e.target;
const file = (_a = target.files) === null || _a === void 0 ? void 0 : _a[0];
const reader = new FileReader();
reader.onload = function (event) {
var _a;
const videoEl = document.createElement('video');
const url = (_a = event.target) === null || _a === void 0 ? void 0 : _a.result;
videoEl.preload = 'metadata';
videoEl.src = url;
videoEl.onloadedmetadata = () => {
res.tempFilePath = url;
res.duration = videoEl.duration;
res.size = event.total;
res.height = videoEl.videoHeight;
res.width = videoEl.videoHeight;
return handle.success(res, { resolve, reject });
};
};
if (file) {
reader.readAsDataURL(file);
}
};
}).finally(() => {
document.body.removeChild(inputEl);
});
};
const chooseMedia = temporarilyNotSupport('chooseMedia');
export { chooseMedia, chooseVideo, compressVideo, createVideoContext, getVideoInfo, openVideoEditor, saveVideoToPhotosAlbum };
//# sourceMappingURL=index.js.map