vue实现图片预览组件封装与使用


Posted in Javascript onJuly 13, 2019

这是移动端使用vue框架与mint-ui实现的父用子之间的通信实现的图片预览的功能,在父组件中每一张图片都可以实现图片放大查看。

子组件

<!--html部分-->
<template>
 <div id="imgEnlarge" ref="imgEnlarge" class="img-bg" @click="imgBgHide" v-show="isShow">
   <mt-swipe :auto="0" :show-indicators="false" :continuous=false :defaultIndex="defaultIndex" @change="handleChange">
    <mt-swipe-item v-for="(item,index) in imgSrc" :key="index">
      <img v-lazy="item" @click="handleClick"/>
    </mt-swipe-item>
   </mt-swipe>
 </div>
</template>
<!--js部分-->
<script>
 export default{
  data(){
   return{
    scroll:0
   }
  },
  props:{
   imgSrc:{
    type:Array
   },
   defaultIndex:{
    type:Number,
    default:0
   },
   isShow:{
    type:Boolean,
    deflault:false
   }
  },
  methods:{
   imgBgHide(){
     this.$emit("imgBgHide") //向父组件传递事件
   } ,
   handleClick(e){
     e.stopPropagation()//阻止事件冒泡,避免点击预览的图片穿透遮罩层
   },
   handleChange(value){
   //向父组件传递轮播图索引,解决加载图片的问题
   this.$emit("handleChange",value)
   }
  },
  watch:{
   isShow:{//判断遮罩是否显示,显示时底层页面无法滚动,隐藏后滚动条回到显示时的位置
     handler(newVal,oldVal){
     if(newVal==true){
      this.scrolly = document.body.scrollTop;
      document.body.style.position = "fixed";
     }else{
      document.body.style.position = "static";
      document.body.scrollTop = this.scrolly; //
     }
    } 
   }
  }

 }
</script>
<!--样式部分-->
<style scoped>
  .img-bg {
   width:100%;
    height:100%;
    position:fixed;
    left:0;
    top:0;
    z-index:9999;
    background:rgba(0,0,0,1);
  }
  .img-bg img{
    width:auto;
    height:auto;
    max-width:100%;
    max-height:100%;
  }
</style>

父组件

<!--html部分-->
<template>
 <img-view :isShow="showImg" :imgSrc="imgSrc" @imgBgHide="imgBgHide" :deflaultIndex="defaultIndex" @handleChange="handleChange"></img-view>
</template>
<!--js部分-->
<script>
 //引入子组件
 import imgView from '@/components/common/imgEnlarge.vue';
 export default {
  data(){
   return{
    showImg:false,
    imgSrc:[],
    defaultIndex:0
   }
  },
  components:{imgView},
  mounted(){
   this.collectImgSrc()
  },
  methods:{
   imgBgHide(){//点击遮罩层,遮罩层隐藏
    this.showImg = false;
   },
   handleChange(value){
    this.defaultIndex = value;
   },
   collectImgSrc(){//点击图片放大
    var _this = this;
    var src = document.getElementsByTagName("img");
    for(var i=0;i<src.length;i++){
     _this.imgSrc.push(src[i].getAttribute("src"));
     src[i].setAttribute("data-index",i);
     src[i].onclick = function(e){
      _this.showImg = true;
      _this.defaultIndex = parseInt(e.target.getAttribute("data-index"));//设置初始显示的轮播图的索引
     }
    }

   }
  }
 }
</script>

在全局样式global.css里面设置图片预览居中

/*图片点击放大组件中swipe图片居中*/
#imgEnlarge .mint-swipe-item-wrap > div {
 visibility:hidden;
 display:flex;
 -moz-box-pack:center;
 -webkit-box-pack:center;
 justify-content:center;
 -moz-box-align:center;
 -webkit-box-align:center;
 align-items:center;
 -webkit-align-items:center;
}
#imgEnlarge .mint-swipe-item-wrap > div.is-active {
 visibility:visible;
 display:flex;
 -moz-box-pack:center;
 -webkit-box-pack:center;
 justify-content:center;
 -moz-box-align:center;
 -webkit-box-align:center;
 align-items:center;
 -webkit-align-items:center;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
IE6不能修改NAME问题的解决方法
Sep 03 Javascript
计算世界完全对称日的js代码,粗糙版
Nov 04 Javascript
防止文件缓存的js代码
Jan 10 Javascript
javascript实现获取cookie过期时间的变通方法
Aug 14 Javascript
jquery实现增加删除行的方法
Feb 03 Javascript
避免jQuery名字冲突 noConflict()方法
Jul 30 Javascript
Bootstrap CSS组件之分页(pagination)和翻页(pager)
Dec 17 Javascript
js实现不提示直接关闭网页窗口
Mar 30 Javascript
Node.js 利用cheerio制作简单的网页爬虫示例
Mar 01 Javascript
vue路由前进后退动画效果的实现代码
Dec 10 Javascript
JS pushlet XMLAdapter适配器用法案例解析
Oct 16 Javascript
vue.js封装switch开关组件的操作
Oct 26 Javascript
微信小程序基于Taro的分享图片功能实践详解
Jul 12 #Javascript
小程序实现悬浮搜索框
Jul 12 #Javascript
小程序实现搜索框功能
Mar 26 #Javascript
iview的table组件自带的过滤器实现
Jul 12 #Javascript
es6中比较有用的7个技巧小结
Jul 12 #Javascript
echarts大屏字体自适应的方法步骤
Jul 12 #Javascript
javascript实现简易聊天室
Jul 12 #Javascript
You might like
php判断并删除空目录及空子目录的方法
2015/02/11 PHP
PHP实现事件机制实例分析
2015/06/26 PHP
浅析php设计模式之数据对象映射模式
2016/03/03 PHP
微信公众号判断用户是否已关注php代码解析
2016/06/24 PHP
浅析php如何实现App常用的秒发功能
2016/08/03 PHP
详解no input file specified 三种解决方法
2019/11/29 PHP
双击滚屏-常用推荐
2006/11/29 Javascript
$()JS小技巧
2007/07/21 Javascript
nodejs 后缀名判断限制代码
2011/03/31 NodeJs
JS复制到剪贴板示例代码
2013/10/30 Javascript
js点击列表文字对应该行显示背景颜色的实现代码
2015/08/05 Javascript
jQuery数据类型小结(14个)
2016/01/08 Javascript
jQuery获取同级元素的简单代码
2016/07/09 Javascript
jQuery无刷新上传之uploadify简单代码
2017/01/17 Javascript
JS实现最简单的冒泡排序算法
2017/02/15 Javascript
详解webpack介绍&amp;安装&amp;常用命令
2017/06/29 Javascript
vue.js实例todoList项目
2017/07/07 Javascript
使用veloticy-ui生成文字动画效果
2018/02/08 Javascript
Vue和React组件之间的传值方式详解
2019/01/31 Javascript
Vue CLI3中使用compass normalize的方法
2019/05/30 Javascript
vue input标签通用指令校验的实现
2019/11/05 Javascript
element实现合并单元格通用方法
2019/11/13 Javascript
jquery传参及获取方式(两种方式)
2020/02/13 jQuery
javascript 易错知识点实例小结
2020/04/25 Javascript
python的paramiko模块实现远程控制和传输示例
2017/10/13 Python
Python 字符串、列表、元组的截取与切片操作示例
2019/09/17 Python
Python安装及Pycharm安装使用教程图解
2019/09/20 Python
Python进程间通信multiprocess代码实例
2020/03/18 Python
python3利用Axes3D库画3D模型图
2020/03/25 Python
速比涛英国官网:Speedo英国
2019/07/15 全球购物
Linux文件系统类型
2012/02/15 面试题
自我评价正确写法范文
2013/12/10 职场文书
巴西世界杯32强口号
2014/06/05 职场文书
Python字典的基础操作
2021/11/01 Python
Java实现注册登录跳转
2022/06/16 Java/Android
Go语言测试库testify使用学习
2022/07/23 Golang