You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
|
|
/*
|
|
|
|
|
* @Author: rileycai
|
|
|
|
|
* @Date: 2022-03-14 14:21:26
|
|
|
|
|
* @LastEditTime: 2022-03-14 15:23:04
|
|
|
|
|
* @LastEditors: rileycai
|
|
|
|
|
* @Description: webp-image组件对t-image包裹了一层,主要实现图片裁剪、webp压缩功能
|
|
|
|
|
* @FilePath: /tdesign-miniprogram-starter/components/webp-image/index.js
|
|
|
|
|
*/
|
|
|
|
|
const systemInfo = wx.getSystemInfoSync();
|
|
|
|
|
Component({
|
|
|
|
|
externalClasses: ['t-class', 't-class-load'],
|
|
|
|
|
properties: {
|
|
|
|
|
loadFailed: {
|
|
|
|
|
type: String,
|
|
|
|
|
value: 'default',
|
|
|
|
|
},
|
|
|
|
|
loading: {
|
|
|
|
|
type: String,
|
|
|
|
|
value: 'default',
|
|
|
|
|
},
|
|
|
|
|
src: {
|
|
|
|
|
type: String,
|
|
|
|
|
value: '',
|
|
|
|
|
},
|
|
|
|
|
mode: {
|
|
|
|
|
type: String,
|
|
|
|
|
value: 'aspectFill',
|
|
|
|
|
},
|
|
|
|
|
webp: {
|
|
|
|
|
type: Boolean,
|
|
|
|
|
value: true,
|
|
|
|
|
},
|
|
|
|
|
lazyLoad: {
|
|
|
|
|
type: Boolean,
|
|
|
|
|
value: false,
|
|
|
|
|
},
|
|
|
|
|
showMenuByLongpress: {
|
|
|
|
|
type: Boolean,
|
|
|
|
|
value: false,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
data: {
|
|
|
|
|
thumbHeight: 375,
|
|
|
|
|
thumbWidth: 375,
|
|
|
|
|
systemInfo,
|
|
|
|
|
},
|
|
|
|
|
lifetimes: {
|
|
|
|
|
ready() {
|
|
|
|
|
const { mode } = this.properties;
|
|
|
|
|
// 获取容器的真实宽高,设置图片的裁剪宽度
|
|
|
|
|
this.getRect('.J-image').then((res) => {
|
|
|
|
|
if (res) {
|
|
|
|
|
const { width, height } = res;
|
|
|
|
|
this.setData(
|
|
|
|
|
mode === 'heightFix'
|
|
|
|
|
? {
|
|
|
|
|
thumbHeight: this.px2rpx(height) || 375,
|
|
|
|
|
}
|
|
|
|
|
: {
|
|
|
|
|
thumbWidth: this.px2rpx(width) || 375,
|
|
|
|
|
},
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
methods: {
|
|
|
|
|
px2rpx(px) {
|
|
|
|
|
return (750 / (systemInfo.screenWidth || 375)) * px;
|
|
|
|
|
},
|
|
|
|
|
getRect(selector) {
|
|
|
|
|
return new Promise((resolve) => {
|
|
|
|
|
if (!this.selectorQuery) {
|
|
|
|
|
this.selectorQuery = this.createSelectorQuery();
|
|
|
|
|
}
|
|
|
|
|
this.selectorQuery.select(selector).boundingClientRect(resolve).exec();
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
onLoad(e) {
|
|
|
|
|
this.triggerEvent('load', e.detail);
|
|
|
|
|
},
|
|
|
|
|
onError(e) {
|
|
|
|
|
this.triggerEvent('error', e.detail);
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
});
|