uniapp实现头像预览功能 - vue3

使用 uniApp+vue3  实现头像预览 

需求:点击头像可预览、拖动及双击放大,单击关闭

        效果图: 

 实现代码(完整版):

<template>
  <view>
    <view class="my_head_portrait" @click.stop="handlePreview('https://lupic.cdn.bcebos.com/20210629/9911696_14.jpg')">
           <image src="https://lupic.cdn.bcebos.com/20210629/9911696_14.jpg"/>
    </view>
      <!-- 头像预览 -->
      <movable-area v-if="previewDate.preview" scale-area class="movable-area" >
          <movable-view class="movable-view" direction="all" scale="true"
          scale-min="1" scale-max="4" :scale-value="previewDate.scale" 
          @touchend="maskTouchend"
          @touchstart="maskTouchstart">
          <image style="width:100%; height: 50%;" :src="previewDate.current"> </image>
        </movable-view>
      </movable-area>

  </view>
</template>

<script setup>
import { ref } from 'vue'
// 图片预览
const previewDate =ref({
  scale:1,
  current:'',
  preview:false,
  touchNum : 0,
	startData:{
		pageX: '',
		pageY: ''
	},
})

const handlePreview =(url) => {
  previewDate.value.scale = 1;
  if (url) {
    previewDate.value.preview = true;
    previewDate.value.current=url
  }
}

const maskTouchstart =(e) => {
previewDate.value.startData.pageX= e.changedTouches[0].pageX
previewDate.value.startData.pageY= e.changedTouches[0].pageY
}

const maskTouchend =(e) => {
			previewDate.value.touchNum ++
			let	subX = e.changedTouches[0].pageX - previewDate.value.startData.pageX
			let	subY = e.changedTouches[0].pageY - previewDate.value.startData.pageY
			
			setTimeout(()=>{
        //单击关闭
				if(previewDate.value.touchNum == 1){
					if(subX==0 && subY==0){
					previewDate.value.preview = false;
				}
				}
	
        //双击事件放大缩小
				if(previewDate.value.touchNum >= 2){
					if (previewDate.value.scale == 4) {
            previewDate.value.scale = 1;
          } else {
            previewDate.value.scale = 4;
          }
				}
        previewDate.value.touchNum = 0
			},300)
}

</script>
<style lang='scss'>
  .movable-area {
		position: fixed;
		z-index: 99999;
		left: 0;
		top: 0;
		width: 100vw;
		height: 100vh;
		background-color: #4e4e4e;
	}
 
	.movable-view {
		width: 100vw;
		height: 100vh;
		justify-content: center; /*子元素水平居中*/
		align-items: center; /*子元素垂直居中*/
		display: -webkit-flex;
    image{
      border-radius: 0% !important;
    }
	}
</style>

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
UniApp 是一款跨平台的应用开发框架,可以在一个项目中同时开发出小程序App、H5 等多个平台的应用。要实现类似于 Vue-Router 的功能,可以按照以下步骤进行: 1. 添加路由配置:在项目的根目录下找到`pages.json`文件,该文件是 UniApp 的页面配置文件。在该文件中,添加一个 `pages` 数组,用来存放所有的页面路径,以及页面的配置信息。每个页面都可以配置一个 `name`,用于标识该页面,在后续路由跳转时使用。 2. 创建路由实例:在 main.js(或者其他入口文件)中,创建一个路由实例并导出供全局使用。在路由实例中可以定义多个路由映射关系,比如可以使用一个数组,将路由的 path 和 component 关联起来。 3. 在页面中使用路由:在需要跳转的页面中,使用 `uni.navigateTo` 或者 `uni.switchTab`等方法来触发路由的跳转。 4. 监听路由事件:如果需要在路由跳转前或者跳转后进行额外的处理,可以监听路由跳转的生命周期事件,如 `beforeEnter`、`beforeLeave`、`afterEnter` 等。在这些事件的回调函数中执行相应的逻辑。 5. 获取路由参数:在目标页面中,可以通过 `this.$route.query` 或者使用 uni-app 封装的 `$mp.query` 来获取传递的路由参数。 通过以上步骤,我们可以在 UniApp实现类似于 Vue-Router 的路由功能。在 UniApp 中,路由的使用方式与 Vue-Router 类似,但可能存在一些细微的差别。可以参考 UniApp 的官方文档和示例代码,更深入地了解如何使用 UniApp 的路由功能

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值