|  | @@ -0,0 +1,189 @@
 | 
	
		
			
				|  |  | +<template src="./contrastImg.html">
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +</template>
 | 
	
		
			
				|  |  | +<script>
 | 
	
		
			
				|  |  | +    export default {
 | 
	
		
			
				|  |  | +        name: "contrastImg",
 | 
	
		
			
				|  |  | +        props: {
 | 
	
		
			
				|  |  | +            leftSrc: {
 | 
	
		
			
				|  |  | +                type: String,
 | 
	
		
			
				|  |  | +                default: '',
 | 
	
		
			
				|  |  | +            },
 | 
	
		
			
				|  |  | +            rightSrc: {
 | 
	
		
			
				|  |  | +                type: String,
 | 
	
		
			
				|  |  | +                default: '',
 | 
	
		
			
				|  |  | +            },
 | 
	
		
			
				|  |  | +            cStyle: {
 | 
	
		
			
				|  |  | +                type: String,
 | 
	
		
			
				|  |  | +                default: '',
 | 
	
		
			
				|  |  | +            },
 | 
	
		
			
				|  |  | +            mode: {
 | 
	
		
			
				|  |  | +                type: String,
 | 
	
		
			
				|  |  | +                default: 'aspectFill',
 | 
	
		
			
				|  |  | +            },
 | 
	
		
			
				|  |  | +            type: {
 | 
	
		
			
				|  |  | +                type: String,
 | 
	
		
			
				|  |  | +                default: '1',
 | 
	
		
			
				|  |  | +            },
 | 
	
		
			
				|  |  | +            modelType: {
 | 
	
		
			
				|  |  | +                type: String,
 | 
	
		
			
				|  |  | +                default: '1',
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        },
 | 
	
		
			
				|  |  | +        data() {
 | 
	
		
			
				|  |  | +            return {
 | 
	
		
			
				|  |  | +                loaded: false,
 | 
	
		
			
				|  |  | +                loadNum: 1, //尝试加载次数
 | 
	
		
			
				|  |  | +                thumbLoaded: false,
 | 
	
		
			
				|  |  | +                newUrl: '',
 | 
	
		
			
				|  |  | +                // typeCompressString:"imageMogr2/auto-orient/thumbnail/200x200/blur/1x0/quality/75",
 | 
	
		
			
				|  |  | +                typeString: "imageMogr2/auto-orient/format/webp/blur/1x0/quality/75",
 | 
	
		
			
				|  |  | +                showSwiper: false, //是否显示切换视图状态,默认不显示
 | 
	
		
			
				|  |  | +                unit: 1,
 | 
	
		
			
				|  |  | +                translateX: 0, //原图左右移动距离
 | 
	
		
			
				|  |  | +                startX: 0,
 | 
	
		
			
				|  |  | +                lastX: 0, //上一次的距离
 | 
	
		
			
				|  |  | +                needAni: false, //回弹动画是否需要
 | 
	
		
			
				|  |  | +                width: window.innerWidth,
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        },
 | 
	
		
			
				|  |  | +        mounted() { //生命周期不要更换,此处逻辑必须是创建时处理
 | 
	
		
			
				|  |  | +            this.newUrl = this.webpImage(this.rightSrc);
 | 
	
		
			
				|  |  | +            // var str = "width: 688rpx;height: 340rpx;";
 | 
	
		
			
				|  |  | +            let startWidth = window.innerWidth;
 | 
	
		
			
				|  |  | +            var match = this.cStyle.match(/width:\s*(\d+px)/);
 | 
	
		
			
				|  |  | +            if (match) {
 | 
	
		
			
				|  |  | +                this.width = parseFloat(match[1])
 | 
	
		
			
				|  |  | +            } else {
 | 
	
		
			
				|  |  | +                console.log("未找到匹配的width属性值");
 | 
	
		
			
				|  |  | +                this.width = startWidth;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            // this.translateX = this.width;
 | 
	
		
			
				|  |  | +            if (this.type == '2') { //直接进入拉伸状态
 | 
	
		
			
				|  |  | +                this.translateX = this.width / 2;
 | 
	
		
			
				|  |  | +                this.showSwiper = true;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        },
 | 
	
		
			
				|  |  | +        methods: {
 | 
	
		
			
				|  |  | +            touchstart(e) {
 | 
	
		
			
				|  |  | +                this.lastX = e.changedTouches[0].clientX;
 | 
	
		
			
				|  |  | +                this.startX = e.changedTouches[0].clientX;
 | 
	
		
			
				|  |  | +                // let currPage = getCurrentPages()[getCurrentPages().length - 1] ? getCurrentPages()[getCurrentPages().length - 1].$vm : null;
 | 
	
		
			
				|  |  | +                // if(currPage && currPage.hasOwnProperty('contrastAutoPlay')){
 | 
	
		
			
				|  |  | +                //   currPage.contrastAutoPlay = false;
 | 
	
		
			
				|  |  | +                // }
 | 
	
		
			
				|  |  | +            },
 | 
	
		
			
				|  |  | +            touchmove(e) {
 | 
	
		
			
				|  |  | +                let touchMoveX = e.changedTouches[0].clientX; //滑动变化坐标
 | 
	
		
			
				|  |  | +                let moveX = (touchMoveX - this.lastX) * this.unit; //相对于上一次偏移的距离-转为rpx单位
 | 
	
		
			
				|  |  | +                this.translateX = Number(this.translateX) + moveX;
 | 
	
		
			
				|  |  | +                if (this.translateX < 0) {
 | 
	
		
			
				|  |  | +                    this.translateX = 0;
 | 
	
		
			
				|  |  | +                } else if (this.translateX > this.width) {
 | 
	
		
			
				|  |  | +                    this.translateX = this.width;
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +                this.lastX = touchMoveX;
 | 
	
		
			
				|  |  | +            },
 | 
	
		
			
				|  |  | +            touchend(e) {
 | 
	
		
			
				|  |  | +                // let touchMoveX = e.changedTouches[0].clientX; //滑动变化坐标
 | 
	
		
			
				|  |  | +                // if(touchMoveX == this.startX){//释放时的坐标和开始时一致,表示点击行为
 | 
	
		
			
				|  |  | +                // 	console.warn("***clickHandle***")
 | 
	
		
			
				|  |  | +                // 	this.$emit('clickHandle');
 | 
	
		
			
				|  |  | +                // }
 | 
	
		
			
				|  |  | +                // let currPage = getCurrentPages()[getCurrentPages().length - 1] ? getCurrentPages()[getCurrentPages().length - 1].$vm : null;
 | 
	
		
			
				|  |  | +                // if(currPage && currPage.hasOwnProperty('contrastAutoPlay')){
 | 
	
		
			
				|  |  | +                //   currPage.contrastAutoPlay = true;
 | 
	
		
			
				|  |  | +                // }
 | 
	
		
			
				|  |  | +            },
 | 
	
		
			
				|  |  | +            catchTouchMove: function() {
 | 
	
		
			
				|  |  | +                return false;
 | 
	
		
			
				|  |  | +            },
 | 
	
		
			
				|  |  | +            clear(e) {
 | 
	
		
			
				|  |  | +                // TODO nvue 取消冒泡
 | 
	
		
			
				|  |  | +                e.stopPropagation()
 | 
	
		
			
				|  |  | +            },
 | 
	
		
			
				|  |  | +            clickHandle(e) {
 | 
	
		
			
				|  |  | +                this.$emit('clickHandle');
 | 
	
		
			
				|  |  | +                // let leftDistance = 0; // 获取组件距离屏幕左边的距离
 | 
	
		
			
				|  |  | +                // 获取当前点击的组件信息
 | 
	
		
			
				|  |  | +                // const query = uni.createSelectorQuery().in(this);
 | 
	
		
			
				|  |  | +                // query.select('.containView').boundingClientRect(data => {
 | 
	
		
			
				|  |  | +                //     if (data) {
 | 
	
		
			
				|  |  | +                //         leftDistance = data.left; // 获取组件距离屏幕左边的距离-单位px
 | 
	
		
			
				|  |  | +                //         console.log('组件距离屏幕左边的距离:', leftDistance);
 | 
	
		
			
				|  |  | +                //         console.warn("***clickHandle***",e,this.translateX,leftDistance)
 | 
	
		
			
				|  |  | +                //         let pointX = e.detail.x - leftDistance;
 | 
	
		
			
				|  |  | +                //         let position = "left";
 | 
	
		
			
				|  |  | +                //         if(pointX < (this.translateX/2)){//点击的是左边
 | 
	
		
			
				|  |  | +                //           position = "left";
 | 
	
		
			
				|  |  | +                //         }else{//点击的是右边
 | 
	
		
			
				|  |  | +                //           position = "right"; 
 | 
	
		
			
				|  |  | +                //         }
 | 
	
		
			
				|  |  | +                //         this.$emit('clickHandle',{position});
 | 
	
		
			
				|  |  | +                //     }
 | 
	
		
			
				|  |  | +                // }).exec();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            },
 | 
	
		
			
				|  |  | +            compareAction() {
 | 
	
		
			
				|  |  | +                this.showSwiper = !this.showSwiper;
 | 
	
		
			
				|  |  | +                if (this.showSwiper) { //显示
 | 
	
		
			
				|  |  | +                    this.needAni = true;
 | 
	
		
			
				|  |  | +                    this.$nextTick(() => {
 | 
	
		
			
				|  |  | +                        this.translateX = this.width / 2;
 | 
	
		
			
				|  |  | +                    })
 | 
	
		
			
				|  |  | +                    // 动画结束后,清除动画的class,确保不影响滑动效果
 | 
	
		
			
				|  |  | +                    setTimeout(() => {
 | 
	
		
			
				|  |  | +                        this.needAni = false;
 | 
	
		
			
				|  |  | +                    }, 510);
 | 
	
		
			
				|  |  | +                } else {
 | 
	
		
			
				|  |  | +                    this.needAni = true;
 | 
	
		
			
				|  |  | +                    this.$nextTick(() => {
 | 
	
		
			
				|  |  | +                        this.translateX = 0;
 | 
	
		
			
				|  |  | +                    })
 | 
	
		
			
				|  |  | +                    // 动画结束后,清除动画的class,确保不影响滑动效果
 | 
	
		
			
				|  |  | +                    setTimeout(() => {
 | 
	
		
			
				|  |  | +                        this.needAni = false;
 | 
	
		
			
				|  |  | +                    }, 510);
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +                this.$emit('compareAction', this.showSwiper)
 | 
	
		
			
				|  |  | +            },
 | 
	
		
			
				|  |  | +            // 获取无损压缩图-webp格式
 | 
	
		
			
				|  |  | +            webpImage(url) {
 | 
	
		
			
				|  |  | +                let result = url;
 | 
	
		
			
				|  |  | +                if (result.indexOf('https://elab-marketing-web.oss') != -1) {
 | 
	
		
			
				|  |  | +                    this.typeString = "x-oss-process=image/auto-orient,1/quality,Q_46/format,jpg";
 | 
	
		
			
				|  |  | +                } else if (result.indexOf('https://dm.static') != -1) {
 | 
	
		
			
				|  |  | +                    this.typeString = "imageMogr2/auto-orient/format/webp/blur/1x0/quality/75";
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +                if (result) {
 | 
	
		
			
				|  |  | +                    if (this.typeString) {
 | 
	
		
			
				|  |  | +                        if (result.indexOf('?') > -1) {
 | 
	
		
			
				|  |  | +                            return result + "&" + this.typeString;
 | 
	
		
			
				|  |  | +                        } else {
 | 
	
		
			
				|  |  | +                            return result + "?" + this.typeString;
 | 
	
		
			
				|  |  | +                        }
 | 
	
		
			
				|  |  | +                    } else {
 | 
	
		
			
				|  |  | +                        return result
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                } else {
 | 
	
		
			
				|  |  | +                    return ""
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            },
 | 
	
		
			
				|  |  | +            //加载失败,重复三次
 | 
	
		
			
				|  |  | +            errorLoad(e) {
 | 
	
		
			
				|  |  | +                this.loadNum++;
 | 
	
		
			
				|  |  | +                if (this.loadNum > 3) {
 | 
	
		
			
				|  |  | +                    return false;
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +                console.log(e);
 | 
	
		
			
				|  |  | +                let random = Math.random();
 | 
	
		
			
				|  |  | +                this.error = true;
 | 
	
		
			
				|  |  | +                // this.src = this.src + (this.src.indexOf('?') > -1 ? '&' + random : '?' + random);
 | 
	
		
			
				|  |  | +                console.warn("***errorLoad***", this.src);
 | 
	
		
			
				|  |  | +            },
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +</script>
 | 
	
		
			
				|  |  | +<style lang="scss" scoped>
 | 
	
		
			
				|  |  | +    @import "./contrastImg.scss";
 | 
	
		
			
				|  |  | +</style>
 |