module.exports =
|
/******/ (function (modules) { // webpackBootstrap
|
/******/ // The module cache
|
/******/
|
var installedModules = {};
|
/******/
|
/******/ // The require function
|
/******/
|
function __webpack_require__(moduleId) {
|
/******/
|
/******/ // Check if module is in cache
|
/******/
|
if (installedModules[moduleId]) {
|
/******/
|
return installedModules[moduleId].exports;
|
/******/
|
}
|
/******/ // Create a new module (and put it into the cache)
|
/******/
|
var module = installedModules[moduleId] = {
|
/******/ i: moduleId,
|
/******/ l: false,
|
/******/ exports: {}
|
/******/
|
};
|
/******/
|
/******/ // Execute the module function
|
/******/
|
modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
|
/******/
|
/******/ // Flag the module as loaded
|
/******/
|
module.l = true;
|
/******/
|
/******/ // Return the exports of the module
|
/******/
|
return module.exports;
|
/******/
|
}
|
|
/******/
|
/******/
|
/******/ // expose the modules object (__webpack_modules__)
|
/******/
|
__webpack_require__.m = modules;
|
/******/
|
/******/ // expose the module cache
|
/******/
|
__webpack_require__.c = installedModules;
|
/******/
|
/******/ // define getter function for harmony exports
|
/******/
|
__webpack_require__.d = function (exports, name, getter) {
|
/******/
|
if (!__webpack_require__.o(exports, name)) {
|
/******/
|
Object.defineProperty(exports, name, {enumerable: true, get: getter});
|
/******/
|
}
|
/******/
|
};
|
/******/
|
/******/ // define __esModule on exports
|
/******/
|
__webpack_require__.r = function (exports) {
|
/******/
|
if (typeof Symbol !== 'undefined' && Symbol.toStringTag) {
|
/******/
|
Object.defineProperty(exports, Symbol.toStringTag, {value: 'Module'});
|
/******/
|
}
|
/******/
|
Object.defineProperty(exports, '__esModule', {value: true});
|
/******/
|
};
|
/******/
|
/******/ // create a fake namespace object
|
/******/ // mode & 1: value is a module id, require it
|
/******/ // mode & 2: merge all properties of value into the ns
|
/******/ // mode & 4: return value when already ns object
|
/******/ // mode & 8|1: behave like require
|
/******/
|
__webpack_require__.t = function (value, mode) {
|
/******/
|
if (mode & 1) value = __webpack_require__(value);
|
/******/
|
if (mode & 8) return value;
|
/******/
|
if ((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
|
/******/
|
var ns = Object.create(null);
|
/******/
|
__webpack_require__.r(ns);
|
/******/
|
Object.defineProperty(ns, 'default', {enumerable: true, value: value});
|
/******/
|
if (mode & 2 && typeof value != 'string') for (var key in value) __webpack_require__.d(ns, key, function (key) {
|
return value[key];
|
}.bind(null, key));
|
/******/
|
return ns;
|
/******/
|
};
|
/******/
|
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
/******/
|
__webpack_require__.n = function (module) {
|
/******/
|
var getter = module && module.__esModule ?
|
/******/ function getDefault() {
|
return module['default'];
|
} :
|
/******/ function getModuleExports() {
|
return module;
|
};
|
/******/
|
__webpack_require__.d(getter, 'a', getter);
|
/******/
|
return getter;
|
/******/
|
};
|
/******/
|
/******/ // Object.prototype.hasOwnProperty.call
|
/******/
|
__webpack_require__.o = function (object, property) {
|
return Object.prototype.hasOwnProperty.call(object, property);
|
};
|
/******/
|
/******/ // __webpack_public_path__
|
/******/
|
__webpack_require__.p = "/dist/";
|
/******/
|
/******/
|
/******/ // Load entry module and return exports
|
/******/
|
return __webpack_require__(__webpack_require__.s = 64);
|
/******/
|
})
|
/************************************************************************/
|
/******/({
|
|
/***/ 0:
|
/***/ (function (module, __webpack_exports__, __webpack_require__) {
|
|
"use strict";
|
/* harmony export (binding) */
|
__webpack_require__.d(__webpack_exports__, "a", function () {
|
return normalizeComponent;
|
});
|
/* globals __VUE_SSR_CONTEXT__ */
|
|
// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).
|
// This module is a runtime utility for cleaner component module output and will
|
// be included in the final webpack user bundle.
|
|
function normalizeComponent(
|
scriptExports,
|
render,
|
staticRenderFns,
|
functionalTemplate,
|
injectStyles,
|
scopeId,
|
moduleIdentifier, /* server only */
|
shadowMode /* vue-cli only */
|
) {
|
// Vue.extend constructor export interop
|
var options = typeof scriptExports === 'function'
|
? scriptExports.options
|
: scriptExports
|
|
// render functions
|
if (render) {
|
options.render = render
|
options.staticRenderFns = staticRenderFns
|
options._compiled = true
|
}
|
|
// functional template
|
if (functionalTemplate) {
|
options.functional = true
|
}
|
|
// scopedId
|
if (scopeId) {
|
options._scopeId = 'data-v-' + scopeId
|
}
|
|
var hook
|
if (moduleIdentifier) { // server build
|
hook = function (context) {
|
// 2.3 injection
|
context =
|
context || // cached call
|
(this.$vnode && this.$vnode.ssrContext) || // stateful
|
(this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional
|
// 2.2 with runInNewContext: true
|
if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {
|
context = __VUE_SSR_CONTEXT__
|
}
|
// inject component styles
|
if (injectStyles) {
|
injectStyles.call(this, context)
|
}
|
// register component module identifier for async chunk inferrence
|
if (context && context._registeredComponents) {
|
context._registeredComponents.add(moduleIdentifier)
|
}
|
}
|
// used by ssr in case component is cached and beforeCreate
|
// never gets called
|
options._ssrRegister = hook
|
} else if (injectStyles) {
|
hook = shadowMode
|
? function () {
|
injectStyles.call(this, this.$root.$options.shadowRoot)
|
}
|
: injectStyles
|
}
|
|
if (hook) {
|
if (options.functional) {
|
// for template-only hot-reload because in that case the render fn doesn't
|
// go through the normalizer
|
options._injectStyles = hook
|
// register for functioal component in vue file
|
var originalRender = options.render
|
options.render = function renderWithStyleInjection(h, context) {
|
hook.call(context)
|
return originalRender(h, context)
|
}
|
} else {
|
// inject component registration as beforeCreate hook
|
var existing = options.beforeCreate
|
options.beforeCreate = existing
|
? [].concat(existing, hook)
|
: [hook]
|
}
|
}
|
|
return {
|
exports: scriptExports,
|
options: options
|
}
|
}
|
|
|
/***/
|
}),
|
|
/***/ 19:
|
/***/ (function (module, exports) {
|
|
module.exports = require("element-ui/lib/utils/types");
|
|
/***/
|
}),
|
|
/***/ 2:
|
/***/ (function (module, exports) {
|
|
module.exports = require("element-ui/lib/utils/dom");
|
|
/***/
|
}),
|
|
/***/ 25:
|
/***/ (function (module, exports) {
|
|
module.exports = require("throttle-debounce/throttle");
|
|
/***/
|
}),
|
|
/***/ 3:
|
/***/ (function (module, exports) {
|
|
module.exports = require("element-ui/lib/utils/util");
|
|
/***/
|
}),
|
|
/***/ 6:
|
/***/ (function (module, exports) {
|
|
module.exports = require("element-ui/lib/mixins/locale");
|
|
/***/
|
}),
|
|
/***/ 64:
|
/***/ (function (module, __webpack_exports__, __webpack_require__) {
|
|
"use strict";
|
__webpack_require__.r(__webpack_exports__);
|
|
// CONCATENATED MODULE: ./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./packages/image/src/main.vue?vue&type=template&id=44d84a7c&
|
var render = function () {
|
var _vm = this
|
var _h = _vm.$createElement
|
var _c = _vm._self._c || _h
|
return _c(
|
"div",
|
{staticClass: "el-image"},
|
[
|
_vm.loading
|
? _vm._t("placeholder", [
|
_c("div", {staticClass: "el-image__placeholder"})
|
])
|
: _vm.error
|
? _vm._t("error", [
|
_c("div", {staticClass: "el-image__error"}, [
|
_vm._v(_vm._s(_vm.t("el.image.error")))
|
])
|
])
|
: _c(
|
"img",
|
_vm._g(
|
_vm._b(
|
{
|
staticClass: "el-image__inner",
|
class: {
|
"el-image__inner--center": _vm.alignCenter,
|
"el-image__preview": _vm.preview
|
},
|
style: _vm.imageStyle,
|
attrs: {src: _vm.src},
|
on: {click: _vm.clickHandler}
|
},
|
"img",
|
_vm.$attrs,
|
false
|
),
|
_vm.$listeners
|
)
|
),
|
_vm.preview && _vm.showViewer
|
? _c("image-viewer", {
|
attrs: {
|
"z-index": _vm.zIndex,
|
"on-close": _vm.closeViewer,
|
"url-list": _vm.previewSrcList
|
}
|
})
|
: _vm._e()
|
],
|
2
|
)
|
}
|
var staticRenderFns = []
|
render._withStripped = true
|
|
|
// CONCATENATED MODULE: ./packages/image/src/main.vue?vue&type=template&id=44d84a7c&
|
|
// CONCATENATED MODULE: ./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./packages/image/src/image-viewer.vue?vue&type=template&id=5e73b307&
|
var image_viewervue_type_template_id_5e73b307_render = function () {
|
var _vm = this
|
var _h = _vm.$createElement
|
var _c = _vm._self._c || _h
|
return _c("transition", {attrs: {name: "viewer-fade"}}, [
|
_c(
|
"div",
|
{
|
staticClass: "el-image-viewer__wrapper",
|
style: {"z-index": _vm.zIndex}
|
},
|
[
|
_c("div", {staticClass: "el-image-viewer__mask"}),
|
_c(
|
"span",
|
{
|
staticClass: "el-image-viewer__btn el-image-viewer__close",
|
on: {click: _vm.hide}
|
},
|
[_c("i", {staticClass: "el-icon-circle-close"})]
|
),
|
!_vm.isSingle
|
? [
|
_c(
|
"span",
|
{
|
staticClass: "el-image-viewer__btn el-image-viewer__prev",
|
class: {"is-disabled": !_vm.infinite && _vm.isFirst},
|
on: {click: _vm.prev}
|
},
|
[_c("i", {staticClass: "el-icon-arrow-left"})]
|
),
|
_c(
|
"span",
|
{
|
staticClass: "el-image-viewer__btn el-image-viewer__next",
|
class: {"is-disabled": !_vm.infinite && _vm.isLast},
|
on: {click: _vm.next}
|
},
|
[_c("i", {staticClass: "el-icon-arrow-right"})]
|
)
|
]
|
: _vm._e(),
|
_c(
|
"div",
|
{staticClass: "el-image-viewer__btn el-image-viewer__actions"},
|
[
|
_c("div", {staticClass: "el-image-viewer__actions__inner"}, [
|
_c("i", {
|
staticClass: "el-icon-zoom-out",
|
on: {
|
click: function ($event) {
|
_vm.handleActions("zoomOut")
|
}
|
}
|
}),
|
_c("i", {
|
staticClass: "el-icon-zoom-in",
|
on: {
|
click: function ($event) {
|
_vm.handleActions("zoomIn")
|
}
|
}
|
}),
|
_c("i", {staticClass: "el-image-viewer__actions__divider"}),
|
_c("i", {class: _vm.mode.icon, on: {click: _vm.toggleMode}}),
|
_c("i", {staticClass: "el-image-viewer__actions__divider"}),
|
_c("i", {
|
staticClass: "el-icon-refresh-left",
|
on: {
|
click: function ($event) {
|
_vm.handleActions("anticlocelise")
|
}
|
}
|
}),
|
_c("i", {
|
staticClass: "el-icon-refresh-right",
|
on: {
|
click: function ($event) {
|
_vm.handleActions("clocelise")
|
}
|
}
|
})
|
])
|
]
|
),
|
_c(
|
"div",
|
{staticClass: "el-image-viewer__canvas"},
|
_vm._l(_vm.urlList, function (url, i) {
|
return i === _vm.index
|
? _c("img", {
|
key: url,
|
ref: "img",
|
refInFor: true,
|
staticClass: "el-image-viewer__img",
|
style: _vm.imgStyle,
|
attrs: {src: _vm.currentImg},
|
on: {
|
load: _vm.handleImgLoad,
|
error: _vm.handleImgError,
|
mousedown: _vm.handleMouseDown
|
}
|
})
|
: _vm._e()
|
}),
|
0
|
)
|
],
|
2
|
)
|
])
|
}
|
var image_viewervue_type_template_id_5e73b307_staticRenderFns = []
|
image_viewervue_type_template_id_5e73b307_render._withStripped = true
|
|
|
// CONCATENATED MODULE: ./packages/image/src/image-viewer.vue?vue&type=template&id=5e73b307&
|
|
// EXTERNAL MODULE: external "element-ui/lib/utils/dom"
|
var dom_ = __webpack_require__(2);
|
|
// EXTERNAL MODULE: external "element-ui/lib/utils/util"
|
var util_ = __webpack_require__(3);
|
|
// CONCATENATED MODULE: ./node_modules/_babel-loader@7.1.5@babel-loader/lib!./node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./packages/image/src/image-viewer.vue?vue&type=script&lang=js&
|
var _extends = Object.assign || function (target) {
|
for (var i = 1; i < arguments.length; i++) {
|
var source = arguments[i];
|
for (var key in source) {
|
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
target[key] = source[key];
|
}
|
}
|
}
|
return target;
|
};
|
|
//
|
//
|
//
|
//
|
//
|
//
|
//
|
//
|
//
|
//
|
//
|
//
|
//
|
//
|
//
|
//
|
//
|
//
|
//
|
//
|
//
|
//
|
//
|
//
|
//
|
//
|
//
|
//
|
//
|
//
|
//
|
//
|
//
|
//
|
//
|
//
|
//
|
//
|
//
|
//
|
//
|
//
|
//
|
//
|
//
|
//
|
//
|
//
|
//
|
//
|
//
|
//
|
//
|
|
|
var Mode = {
|
CONTAIN: {
|
name: 'contain',
|
icon: 'el-icon-full-screen'
|
},
|
ORIGINAL: {
|
name: 'original',
|
icon: 'el-icon-c-scale-to-original'
|
}
|
};
|
|
var mousewheelEventName = Object(util_["isFirefox"])() ? 'DOMMouseScroll' : 'mousewheel';
|
|
/* harmony default export */
|
var image_viewervue_type_script_lang_js_ = ({
|
name: 'elImageViewer',
|
|
props: {
|
urlList: {
|
type: Array,
|
default: function _default() {
|
return [];
|
}
|
},
|
zIndex: {
|
type: Number,
|
default: 2000
|
},
|
onSwitch: {
|
type: Function,
|
default: function _default() {
|
}
|
},
|
onClose: {
|
type: Function,
|
default: function _default() {
|
}
|
}
|
},
|
|
data: function data() {
|
return {
|
index: 0,
|
isShow: false,
|
infinite: true,
|
loading: false,
|
mode: Mode.CONTAIN,
|
transform: {
|
scale: 1,
|
deg: 0,
|
offsetX: 0,
|
offsetY: 0,
|
enableTransition: false
|
}
|
};
|
},
|
|
computed: {
|
isSingle: function isSingle() {
|
return this.urlList.length <= 1;
|
},
|
isFirst: function isFirst() {
|
return this.index === 0;
|
},
|
isLast: function isLast() {
|
return this.index === this.urlList.length - 1;
|
},
|
currentImg: function currentImg() {
|
return this.urlList[this.index];
|
},
|
imgStyle: function imgStyle() {
|
var _transform = this.transform,
|
scale = _transform.scale,
|
deg = _transform.deg,
|
offsetX = _transform.offsetX,
|
offsetY = _transform.offsetY,
|
enableTransition = _transform.enableTransition;
|
|
var style = {
|
transform: 'scale(' + scale + ') rotate(' + deg + 'deg)',
|
transition: enableTransition ? 'transform .3s' : '',
|
'margin-left': offsetX + 'px',
|
'margin-top': offsetY + 'px'
|
};
|
if (this.mode === Mode.CONTAIN) {
|
style.maxWidth = style.maxHeight = '100%';
|
}
|
return style;
|
}
|
},
|
watch: {
|
index: {
|
handler: function handler(val) {
|
this.reset();
|
this.onSwitch(val);
|
}
|
},
|
currentImg: function currentImg(val) {
|
var _this = this;
|
|
this.$nextTick(function (_) {
|
var $img = _this.$refs.img[0];
|
if (!$img.complete) {
|
_this.loading = true;
|
}
|
});
|
}
|
},
|
methods: {
|
hide: function hide() {
|
this.deviceSupportUninstall();
|
this.onClose();
|
},
|
deviceSupportInstall: function deviceSupportInstall() {
|
var _this2 = this;
|
|
this._keyDownHandler = Object(util_["rafThrottle"])(function (e) {
|
var keyCode = e.keyCode;
|
switch (keyCode) {
|
// ESC
|
case 27:
|
_this2.hide();
|
break;
|
// SPACE
|
case 32:
|
_this2.toggleMode();
|
break;
|
// LEFT_ARROW
|
case 37:
|
_this2.prev();
|
break;
|
// UP_ARROW
|
case 38:
|
_this2.handleActions('zoomIn');
|
break;
|
// RIGHT_ARROW
|
case 39:
|
_this2.next();
|
break;
|
// DOWN_ARROW
|
case 40:
|
_this2.handleActions('zoomOut');
|
break;
|
}
|
});
|
this._mouseWheelHandler = Object(util_["rafThrottle"])(function (e) {
|
var delta = e.wheelDelta ? e.wheelDelta : -e.detail;
|
if (delta > 0) {
|
_this2.handleActions('zoomIn', {
|
zoomRate: 0.015,
|
enableTransition: false
|
});
|
} else {
|
_this2.handleActions('zoomOut', {
|
zoomRate: 0.015,
|
enableTransition: false
|
});
|
}
|
});
|
Object(dom_["on"])(document, 'keydown', this._keyDownHandler);
|
Object(dom_["on"])(document, mousewheelEventName, this._mouseWheelHandler);
|
},
|
deviceSupportUninstall: function deviceSupportUninstall() {
|
Object(dom_["off"])(document, 'keydown', this._keyDownHandler);
|
Object(dom_["off"])(document, mousewheelEventName, this._mouseWheelHandler);
|
this._keyDownHandler = null;
|
this._mouseWheelHandler = null;
|
},
|
handleImgLoad: function handleImgLoad(e) {
|
this.loading = false;
|
},
|
handleImgError: function handleImgError(e) {
|
this.loading = false;
|
e.target.alt = '加载失败';
|
},
|
handleMouseDown: function handleMouseDown(e) {
|
var _this3 = this;
|
|
if (this.loading || e.button !== 0) return;
|
|
var _transform2 = this.transform,
|
offsetX = _transform2.offsetX,
|
offsetY = _transform2.offsetY;
|
|
var startX = e.pageX;
|
var startY = e.pageY;
|
this._dragHandler = Object(util_["rafThrottle"])(function (ev) {
|
_this3.transform.offsetX = offsetX + ev.pageX - startX;
|
_this3.transform.offsetY = offsetY + ev.pageY - startY;
|
});
|
Object(dom_["on"])(document, 'mousemove', this._dragHandler);
|
Object(dom_["on"])(document, 'mouseup', function (ev) {
|
Object(dom_["off"])(document, 'mousemove', _this3._dragHandler);
|
});
|
|
e.preventDefault();
|
},
|
reset: function reset() {
|
this.transform = {
|
scale: 1,
|
deg: 0,
|
offsetX: 0,
|
offsetY: 0,
|
enableTransition: false
|
};
|
},
|
toggleMode: function toggleMode() {
|
if (this.loading) return;
|
|
var modeNames = Object.keys(Mode);
|
var modeValues = Object.values(Mode);
|
var index = modeValues.indexOf(this.mode);
|
var nextIndex = (index + 1) % modeNames.length;
|
this.mode = Mode[modeNames[nextIndex]];
|
this.reset();
|
},
|
prev: function prev() {
|
if (this.isFirst && !this.infinite) return;
|
var len = this.urlList.length;
|
this.index = (this.index - 1 + len) % len;
|
},
|
next: function next() {
|
if (this.isLast && !this.infinite) return;
|
var len = this.urlList.length;
|
this.index = (this.index + 1) % len;
|
},
|
handleActions: function handleActions(action) {
|
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
if (this.loading) return;
|
|
var _zoomRate$rotateDeg$e = _extends({
|
zoomRate: 0.2,
|
rotateDeg: 90,
|
enableTransition: true
|
}, options),
|
zoomRate = _zoomRate$rotateDeg$e.zoomRate,
|
rotateDeg = _zoomRate$rotateDeg$e.rotateDeg,
|
enableTransition = _zoomRate$rotateDeg$e.enableTransition;
|
|
var transform = this.transform;
|
|
switch (action) {
|
case 'zoomOut':
|
if (transform.scale > 0.2) {
|
transform.scale = parseFloat((transform.scale - zoomRate).toFixed(3));
|
}
|
break;
|
case 'zoomIn':
|
transform.scale = parseFloat((transform.scale + zoomRate).toFixed(3));
|
break;
|
case 'clocelise':
|
transform.deg += rotateDeg;
|
break;
|
case 'anticlocelise':
|
transform.deg -= rotateDeg;
|
break;
|
}
|
transform.enableTransition = enableTransition;
|
}
|
},
|
mounted: function mounted() {
|
this.deviceSupportInstall();
|
}
|
});
|
// CONCATENATED MODULE: ./packages/image/src/image-viewer.vue?vue&type=script&lang=js&
|
/* harmony default export */
|
var src_image_viewervue_type_script_lang_js_ = (image_viewervue_type_script_lang_js_);
|
// EXTERNAL MODULE: ./node_modules/_vue-loader@15.7.1@vue-loader/lib/runtime/componentNormalizer.js
|
var componentNormalizer = __webpack_require__(0);
|
|
// CONCATENATED MODULE: ./packages/image/src/image-viewer.vue
|
|
|
/* normalize component */
|
|
var component = Object(componentNormalizer["a" /* default */])(
|
src_image_viewervue_type_script_lang_js_,
|
image_viewervue_type_template_id_5e73b307_render,
|
image_viewervue_type_template_id_5e73b307_staticRenderFns,
|
false,
|
null,
|
null,
|
null
|
)
|
|
/* hot reload */
|
if (false) {
|
var api;
|
}
|
component.options.__file = "packages/image/src/image-viewer.vue"
|
/* harmony default export */
|
var image_viewer = (component.exports);
|
// EXTERNAL MODULE: external "element-ui/lib/mixins/locale"
|
var locale_ = __webpack_require__(6);
|
var locale_default = /*#__PURE__*/__webpack_require__.n(locale_);
|
|
// EXTERNAL MODULE: external "element-ui/lib/utils/types"
|
var types_ = __webpack_require__(19);
|
|
// EXTERNAL MODULE: external "throttle-debounce/throttle"
|
var throttle_ = __webpack_require__(25);
|
var throttle_default = /*#__PURE__*/__webpack_require__.n(throttle_);
|
|
// CONCATENATED MODULE: ./node_modules/_babel-loader@7.1.5@babel-loader/lib!./node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./packages/image/src/main.vue?vue&type=script&lang=js&
|
//
|
//
|
//
|
//
|
//
|
//
|
//
|
//
|
//
|
//
|
//
|
//
|
//
|
//
|
//
|
//
|
//
|
//
|
//
|
//
|
//
|
|
|
var isSupportObjectFit = function isSupportObjectFit() {
|
return document.documentElement.style.objectFit !== undefined;
|
};
|
|
var ObjectFit = {
|
NONE: 'none',
|
CONTAIN: 'contain',
|
COVER: 'cover',
|
FILL: 'fill',
|
SCALE_DOWN: 'scale-down'
|
};
|
|
/* harmony default export */
|
var mainvue_type_script_lang_js_ = ({
|
name: 'ElImage',
|
|
mixins: [locale_default.a],
|
inheritAttrs: false,
|
|
components: {
|
ImageViewer: image_viewer
|
},
|
|
props: {
|
src: String,
|
fit: String,
|
lazy: Boolean,
|
scrollContainer: {},
|
previewSrcList: {
|
type: Array,
|
default: function _default() {
|
return [];
|
}
|
},
|
zIndex: {
|
type: Number,
|
default: 2000
|
}
|
},
|
|
data: function data() {
|
return {
|
loading: true,
|
error: false,
|
show: !this.lazy,
|
imageWidth: 0,
|
imageHeight: 0,
|
showViewer: false
|
};
|
},
|
|
|
computed: {
|
imageStyle: function imageStyle() {
|
var fit = this.fit;
|
|
if (!this.$isServer && fit) {
|
return isSupportObjectFit() ? {'object-fit': fit} : this.getImageStyle(fit);
|
}
|
return {};
|
},
|
alignCenter: function alignCenter() {
|
return !this.$isServer && !isSupportObjectFit() && this.fit !== ObjectFit.FILL;
|
},
|
preview: function preview() {
|
var previewSrcList = this.previewSrcList;
|
|
return Array.isArray(previewSrcList) && previewSrcList.length > 0;
|
}
|
},
|
|
watch: {
|
src: function src(val) {
|
this.show && this.loadImage();
|
},
|
show: function show(val) {
|
val && this.loadImage();
|
}
|
},
|
|
mounted: function mounted() {
|
if (this.lazy) {
|
this.addLazyLoadListener();
|
} else {
|
this.loadImage();
|
}
|
},
|
beforeDestroy: function beforeDestroy() {
|
this.lazy && this.removeLazyLoadListener();
|
},
|
|
|
methods: {
|
loadImage: function loadImage() {
|
var _this = this;
|
|
if (this.$isServer) return;
|
|
// reset status
|
this.loading = true;
|
this.error = false;
|
|
var img = new Image();
|
img.onload = function (e) {
|
return _this.handleLoad(e, img);
|
};
|
img.onerror = this.handleError.bind(this);
|
|
// bind html attrs
|
// so it can behave consistently
|
Object.keys(this.$attrs).forEach(function (key) {
|
var value = _this.$attrs[key];
|
img.setAttribute(key, value);
|
});
|
img.src = this.src;
|
},
|
handleLoad: function handleLoad(e, img) {
|
this.imageWidth = img.width;
|
this.imageHeight = img.height;
|
this.loading = false;
|
},
|
handleError: function handleError(e) {
|
this.loading = false;
|
this.error = true;
|
this.$emit('error', e);
|
},
|
handleLazyLoad: function handleLazyLoad() {
|
if (Object(dom_["isInContainer"])(this.$el, this._scrollContainer)) {
|
this.show = true;
|
this.removeLazyLoadListener();
|
}
|
},
|
addLazyLoadListener: function addLazyLoadListener() {
|
if (this.$isServer) return;
|
|
var scrollContainer = this.scrollContainer;
|
|
var _scrollContainer = null;
|
|
if (Object(types_["isHtmlElement"])(scrollContainer)) {
|
_scrollContainer = scrollContainer;
|
} else if (Object(types_["isString"])(scrollContainer)) {
|
_scrollContainer = document.querySelector(scrollContainer);
|
} else {
|
_scrollContainer = Object(dom_["getScrollContainer"])(this.$el);
|
}
|
|
if (_scrollContainer) {
|
this._scrollContainer = _scrollContainer;
|
this._lazyLoadHandler = throttle_default()(200, this.handleLazyLoad);
|
Object(dom_["on"])(_scrollContainer, 'scroll', this._lazyLoadHandler);
|
this.handleLazyLoad();
|
}
|
},
|
removeLazyLoadListener: function removeLazyLoadListener() {
|
var _scrollContainer = this._scrollContainer,
|
_lazyLoadHandler = this._lazyLoadHandler;
|
|
|
if (this.$isServer || !_scrollContainer || !_lazyLoadHandler) return;
|
|
Object(dom_["off"])(_scrollContainer, 'scroll', _lazyLoadHandler);
|
this._scrollContainer = null;
|
this._lazyLoadHandler = null;
|
},
|
|
/**
|
* simulate object-fit behavior to compatible with IE11 and other browsers which not support object-fit
|
*/
|
getImageStyle: function getImageStyle(fit) {
|
var imageWidth = this.imageWidth,
|
imageHeight = this.imageHeight;
|
var _$el = this.$el,
|
containerWidth = _$el.clientWidth,
|
containerHeight = _$el.clientHeight;
|
|
|
if (!imageWidth || !imageHeight || !containerWidth || !containerHeight) return {};
|
|
var vertical = imageWidth / imageHeight < 1;
|
|
if (fit === ObjectFit.SCALE_DOWN) {
|
var isSmaller = imageWidth < containerWidth && imageHeight < containerHeight;
|
fit = isSmaller ? ObjectFit.NONE : ObjectFit.CONTAIN;
|
}
|
|
switch (fit) {
|
case ObjectFit.NONE:
|
return {width: 'auto', height: 'auto'};
|
case ObjectFit.CONTAIN:
|
return vertical ? {width: 'auto'} : {height: 'auto'};
|
case ObjectFit.COVER:
|
return vertical ? {height: 'auto'} : {width: 'auto'};
|
default:
|
return {};
|
}
|
},
|
clickHandler: function clickHandler() {
|
this.showViewer = true;
|
},
|
closeViewer: function closeViewer() {
|
this.showViewer = false;
|
}
|
}
|
});
|
// CONCATENATED MODULE: ./packages/image/src/main.vue?vue&type=script&lang=js&
|
/* harmony default export */
|
var src_mainvue_type_script_lang_js_ = (mainvue_type_script_lang_js_);
|
// CONCATENATED MODULE: ./packages/image/src/main.vue
|
|
|
/* normalize component */
|
|
var main_component = Object(componentNormalizer["a" /* default */])(
|
src_mainvue_type_script_lang_js_,
|
render,
|
staticRenderFns,
|
false,
|
null,
|
null,
|
null
|
)
|
|
/* hot reload */
|
if (false) {
|
var main_api;
|
}
|
main_component.options.__file = "packages/image/src/main.vue"
|
/* harmony default export */
|
var main = (main_component.exports);
|
// CONCATENATED MODULE: ./packages/image/index.js
|
|
|
/* istanbul ignore next */
|
main.install = function (Vue) {
|
Vue.component(main.name, main);
|
};
|
|
/* harmony default export */
|
var packages_image = __webpack_exports__["default"] = (main);
|
|
/***/
|
})
|
|
/******/
|
});
|