@tarojs/taro-h5
Version:
Taro h5 framework
90 lines (87 loc) • 3.4 kB
JavaScript
import { shouldBeObject, getParameterError } from '../../../utils/index.js';
import { MethodHandler } from '../../../utils/handler.js';
/**
* 从本地相册选择图片或使用相机拍照。
*/
const chooseImage = function (options) {
// options must be an Object
const isObject = shouldBeObject(options);
if (!isObject.flag) {
const res = { errMsg: `chooseImage:fail ${isObject.msg}` };
console.error(res.errMsg);
return Promise.reject(res);
}
const { count = 1, success, fail, complete, imageId = 'taroChooseImage', sourceType = ['album', 'camera'] } = options;
const handle = new MethodHandler({ name: 'chooseImage', success, fail, complete });
const res = {
tempFilePaths: [],
tempFiles: []
};
const sourceTypeString = sourceType && sourceType.toString();
const acceptableSourceType = ['user', 'environment', 'camera'];
if (count && typeof count !== 'number') {
res.errMsg = getParameterError({
para: 'count',
correct: 'Number',
wrong: count
});
return handle.fail(res);
}
let el = document.getElementById(imageId);
if (!el) {
const obj = document.createElement('input');
obj.setAttribute('type', 'file');
obj.setAttribute('id', imageId);
if (count > 1) {
obj.setAttribute('multiple', 'multiple');
}
if (acceptableSourceType.indexOf(sourceTypeString) > -1) {
obj.setAttribute('capture', sourceTypeString);
}
obj.setAttribute('accept', 'image/*');
obj.setAttribute('style', 'position: fixed; top: -4000px; left: -3000px; z-index: -300;');
document.body.appendChild(obj);
el = document.getElementById(imageId);
}
else {
if (count > 1) {
el.setAttribute('multiple', 'multiple');
}
else {
el.removeAttribute('multiple');
}
if (acceptableSourceType.indexOf(sourceTypeString) > -1) {
el.setAttribute('capture', sourceTypeString);
}
else {
el.removeAttribute('capture');
}
}
return new Promise((resolve, reject) => {
const TaroMouseEvents = document.createEvent('MouseEvents');
TaroMouseEvents.initEvent('click', true, true);
if (el) {
el.dispatchEvent(TaroMouseEvents);
el.onchange = function (e) {
const target = e.target;
if (target) {
const files = target.files || [];
const arr = [...files];
arr && arr.forEach(item => {
var _a, _b;
const blob = new Blob([item], {
type: item.type
});
const url = URL.createObjectURL(blob);
(_a = res.tempFilePaths) === null || _a === void 0 ? void 0 : _a.push(url);
(_b = res.tempFiles) === null || _b === void 0 ? void 0 : _b.push({ path: url, size: item.size, type: item.type, originalFileObj: item });
});
handle.success(res, { resolve, reject });
target.value = '';
}
};
}
});
};
export { chooseImage };
//# sourceMappingURL=chooseImage.js.map