<template> <view class="background-modal"> <!-- <view class="content-title-name-status-style"> <view class="bug-content-title"> {{content_name}} </view> <button type="default" @click="toPayImageVideoMember()"> 购买 </button> </view> <view class="image-model-background-style"> <view class="image-model-one-background-style" v-for="(itemImages,ids) in itemImagesList" :key="ids" > <image :src="itemImages" lazy-load v-if="isVip" mode="aspectFill" @tap="viewLargeImage(ids)"></image> <image :src="itemImages" lazy-load v-else :class="[ids>4 ? 'filter':'']" mode="aspectFill" @tap="viewLargeImage(ids)"></image> </view> </view> --> <view class="image-black"> <swiper class="swiper" :indicator-dots="indicatorDots" :autoplay="autoplay" :disable-touch='isSwiper' :duration="duration" :current='current' @transition='itemChange' @change='toPay' @animationfinish='endAni'> <swiper-item class="swiper-item" v-for="(imgItem,idx) in imgSmaList" :key="idx" > <movable-area class="swiper-image" :scale-area='isScale' :style="{height: (pageWid/(imgItem.img_wid/imgItem.img_hei))*2 +'upx'}"> <movable-view class="swiper-image-child" :scale-value='sca_val' :disabled="movDis" @touchstart="touched" @scale='scaleFun' out-of-bounds='false' friction='1' inertia='true' animation='true' :scale='isScale' scale-min='1' scale-max='4' :x="x" :y="y" :direction="dir" @change.stop="addChange"> <img :src="image_directory+imgItem.url" ref="innerbox" mode="aspectFit" class="sca-img" @touchmove="imgTouchmove" @touchend="imgTouched" @longpress="saveImg"></img> </movable-view> </movable-area> </swiper-item> </swiper> <view class="dots"> <text>{{current+1}}/{{imageListNumber.length}}</text> </view> </view> </view> </template> <script> import app from '@/App.vue' import api from '@/api/request.js' var that; export default { data() { return { images_list_all:[],//所有的图片 itemImagesList:[], content_name:null, id:null,//图片id imageListNumber: [], //swiper的数组 isVip: false, //是否为会员 indicatorDots: false, //是否有指示点 autoplay: false, //是否自动滑动 duration: 10, //动画速度 current: 0, //当前滑块 moveSave: true, scale: 1, isSwiper: false, image_directory: '', sca_val: 1, imgSmaList: [], swipered: 0, x:0, y:0, dir: 'horizontal', movDis: false, isScale: true, reLoadList: { index: '', url: '' }, img_sty:{ height: '100%' }, img_hei: '', pageWid: '', } }, created(){ that = this; var imageObject = app.globalData.imageObject console.log("imageObject:",imageObject); that.content_name = imageObject.image.release_time+"第"+imageObject.image.periodical+"期"+imageObject.image.subject that.id = imageObject.image.id that.image_directory = imageObject.image_directory; uni.getSystemInfo({ success: function (res) { that.pageWid = res.windowWidth; } }); var imageDataList = imageObject.image.image_path.split(','); if(app.globalData.userInfo.member_rank == null){ that.isVip = false; } else { that.isVip = true; } for(let h = 0;h < imageDataList.length;h++){ var imgJson = { url: '', img_wid: '', img_hei: '' } console.log("url",imageDataList[h]) imgJson.url = imageDataList[h]; var url = that.image_directory+imageDataList[h]; that.getImgWid(url,h); that.getImgHei(url,h); // uni.getImageInfo({ // src: that.image_directory + url, // success: function (image) { // console.log(image.width); // console.log(image.height); // imgJson.img_wid = image.height; // imgJson.img_hei = image.width // console.log('aad',url) // // imgJson.size = that.pageWid/(image.width/image.height); // } // }) imageDataList[h] = imgJson } that.imageListNumber = imageDataList; that.current = 0; that.swipered = 0; // if(that.itemImagesList.length<app.globalData.imagesLimitNumber){ if(that.imageListNumber.length < 6){ for(var j=0;j<that.imageListNumber.length;j++){ that.imgSmaList[j] = that.imageListNumber[j]; } } else { for(var j=0;j<6;j++){ that.imgSmaList[j] = that.imageListNumber[j]; } } console.log(that.imgSmaList); }, onReady(){ // let div = that.$refs.innerbox; // that.img_hei = div[0].clientHeight + 'px'; // console.log(that.img_hei); that = this }, //页面滚动到底部的事件 // onReachBottom(){ // that.startIndex = that.startIndex+12 // var start =null; // var end = null; // if(that.startIndex > that.accountIndex){ // start = that.startIndex-12; // end = that.accountIndex; // } else { // start = that.startIndex-12; // end = that.startIndex; // } // var sliceList = that.images_list_all.slice(start,end); // for(let i=0;i<sliceList.length;i++){ // that.imgSmaList.push(that.image_directory+sliceList[i]); // }; // }, methods: { toPayImageVideoMember(){ that.current = 3; app.globalData.imageInfoObj = { buyType:0, imageObject:app.globalData.imageObject } uni.navigateTo({ url:'/pages/payImageVideoMember/payImageVideoMember' }) }, getImgWid(url,index){ uni.getImageInfo({ src: url, success: function (image) { console.log(image); that.imageListNumber[index].img_wid = image.width }, fail:function(err){ resolve(false); } }); }, getImgHei(url,index){ uni.getImageInfo({ src: url, success: function (image) { that.imageListNumber[index].img_hei = image.height; }, fail:function(err){ resolve(false); } }); }, scaleFun(e){ that.scale = e.detail.scale; // const query = uni.createSelectorQuery().in(that).selectAll('.sca-img'); // query.boundingClientRect(data => { // that.img_hei = JSON.stringify(data[that.current].height); // }).exec(); // that.img_sty = { // height: that.img_hei*2 + 'upx', // } // console.log(that.img_sty); if(that.scale == 1){ that.isSwiper = false; that.moveSave = true; that.dir = 'horizontal'; } else { that.dir = 'all' // that.reLoadList.index = that.current; // that.reLoadList.url = that.imgSmaList[that.current]; that.movDis = false; that.isSwiper = true; that.moveSave = false; } }, saveImg(){ if(app.globalData.userInfo.member_rank!=null){ if(that.moveSave) { that.movDis = false; that.isSwiper = true; uni.showModal({ title: '温馨提示', cancelText: '取消', confirmText: '确认', content: '是否保存图片?', success: function(res) { that.movDis = true; that.isSwiper = false; if (res.confirm) { console.log("是否保存?"+that.image_directory + that.imageListNumber[that.current].url); uni.saveImageToPhotosAlbum({ filePath: that.image_directory + that.imageListNumber[that.current].url, success: function () { uni.showToast({ title: '已保存', icon: 'none', duration:1000 }) console.log('save success'); } }); } } }); } } }, toPay(e){ that.moveSave = true; that.current = e.detail.current; that.movDis = false; if(app.globalData.userInfo.member_rank == null){ if(that.current > 4){ that.toPayImageVideoMember(); } } if(that.sca_val == 1){ that.sca_val = 1.01; } else { that.sca_val = 1; } console.log('adasda,'+that.sca_val) // if(that.scale > 1){ // console.log(that.reLoadList); // that.imgSmaList[that.reLoadList.index] = that.reLoadList.url; // console.log('add'+that.imgSmaList[that.reLoadList.index]); // } if(that.current+5 < that.imageListNumber.length){ if(that.swipered < that.current){ that.swipered = that.current; that.imgSmaList[that.current+5] = that.imageListNumber[that.current+5] } } }, touch(){ that.isSwiper = true; }, touched(){ if(that.scale > 1){ that.movDis = false; that.isSwiper = true; } }, addChange(e){ if(that.scale > 1){ // console.log(e) if(e.detail.source == 'out-of-bounds'||e.detail.source == 'touch-out-of-bounds'){ that.isSwiper = false; } else { that.touchSource = e.detail.source; that.isSwiper = true; } } }, itemChange(){ that.isSwiper = false; that.movDis = true; that.moveSave = false; }, imgTouchmove(){ that.moveSave = false; }, imgTouched(){ that.moveSave = true; }, endAni(){ that.moveSave = true; that.movDis = false; that.sca_val = 1; }, } } </script> <style scoped lang="less"> * { margin: 0; padding: 0; } .content-title-name-status-style{ width: 100%; height: 50px; display: flex; justify-content: center; align-items: center; } .bug-content-title{ width: 70%; height: 100%; display: flex; justify-content: center; align-items: center; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .content-title-name-status-style button{ width: 15%; margin-left: 10%; height: 50%; display: flex; justify-content: center; align-items: center; background-color: #CE4096; color: #FFFFFF; font-size: 13px; border-radius: 5px; } .image-model-background-style{ width: 95%; margin-left: 2.5%; margin-top: 10px; display: flex; flex-wrap: wrap; justify-content: left; align-items: center; } .image-model-one-background-style{ width: 30%; height: 180px; margin-right: 3%; margin-top: 10px; } .image-model-background-style image{ width: 100%; height:100%; margin-right: 3%; margin-top: 10px; } .filter{ filter: blur(10px); } .image-black{ display: block; position: fixed; left: 0; top: 0; width: 100%; height: 100%; z-index: 10; background: rgba(0,0,0,1); } .page-section-spacing{ width: 100%; height: 100%; } .swiper{ width: 100%; height: 100%; } .swiper-item{ width: 100%; height: 100%; } .swiper-image{ position: absolute; left: 50%; top: 50%; width: 100%; height: 100%; transform: translate(-50%, -50%); } .swiper-image-child{ width: 100%; height: 100%; position: absolute; left: 50%; top: 50%; -webkit-transform: translate(-50%,-50%); transform: translate(-50%,-50%); } .sca-img{ position: absolute; left: 50%; top: 50%; -webkit-transform: translate(-50%,-50%); transform: translate(-50%,-50%); max-height: 100%; max-width: 100%; } .dots{ width: 100px; position: absolute; top: 10px; left: 50%; z-index: 999; color: #fff; text-align: center; margin-left: -50px; } </style>
关注我的公众号SpaceObj 领取idea系列激活码
标签:
uniapp
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)