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 相关文章推荐
用js调用迅雷下载代码的二种方法
Apr 15 Javascript
javascript闭包的高级使用方法实例
Jul 04 Javascript
JavaScript按位运算符的应用简析
Feb 04 Javascript
js使用循环清空某个div中的input标签值
Sep 29 Javascript
Javascript核心读书有感之类型、值和变量
Feb 11 Javascript
九种原生js动画效果
Nov 11 Javascript
jquery常用的12个小功能
Jul 22 Javascript
jQuery实现注册会员时密码强度提示信息功能示例
Sep 05 jQuery
微信小程序tabbar底部导航
Nov 05 Javascript
从源码里了解vue中的nextTick的使用
Nov 22 Javascript
Element-UI中关于table表格的那些骚操作(小结)
Aug 15 Javascript
如何通过JS实现转码与解码
Feb 21 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
我的群发邮件程序
2006/10/09 PHP
php ios推送(代码)
2013/07/01 PHP
php定义数组和使用示例(php数组的定义方法)
2014/03/29 PHP
Mac OS下配置PHP+MySql环境
2015/02/25 PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式一图文详解
2019/04/09 PHP
通过jquery的$.getJSON做一个跨域ajax请求试验
2011/05/03 Javascript
JavaScript中this关键词的使用技巧、工作原理以及注意事项
2014/05/20 Javascript
js常用系统函数用法实例分析
2015/01/12 Javascript
浅析javascript中的DOM
2015/03/01 Javascript
vue从使用到源码实现教程详解
2016/09/19 Javascript
bootstrap手风琴折叠示例代码分享
2017/05/22 Javascript
vue深入解析之render function code详解
2017/07/18 Javascript
jQuery each和js forEach用法比较
2019/02/27 jQuery
RxJS在TypeScript中的简单使用详解
2020/04/13 Javascript
Vue是怎么渲染template内的标签内容的
2020/06/05 Javascript
[47:42]Fnatic vs Liquid 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python实现对一个完整url进行分割的方法
2015/04/29 Python
Python3访问并下载网页内容的方法
2015/07/28 Python
Python中的数据对象持久化存储模块pickle的使用示例
2016/03/03 Python
KMP算法精解及其Python版的代码示例
2016/06/01 Python
详解使用pymysql在python中对mysql的增删改查操作(综合)
2017/01/18 Python
利用python爬取散文网的文章实例教程
2017/06/18 Python
PyQt4实现下拉菜单可供选择并打印出来
2018/04/20 Python
python爬虫-模拟微博登录功能
2019/09/12 Python
Python算法的时间复杂度和空间复杂度(实例解析)
2019/11/19 Python
python实现输入三角形边长自动作图求面积案例
2020/04/12 Python
pytorch 多分类问题,计算百分比操作
2020/07/09 Python
Hoka One One法国官网:美国专业跑鞋品牌
2018/12/29 全球购物
PHP如何删除一个Cookie值
2012/11/15 面试题
研究生自荐信
2013/10/09 职场文书
科技之星事迹材料
2014/06/02 职场文书
交通事故赔偿协议书怎么写
2014/10/04 职场文书
2015年小学中秋节活动总结
2015/03/23 职场文书
2015年护士长个人工作总结
2015/04/24 职场文书
学生会2016感恩节活动小结
2016/04/01 职场文书
CKAD认证中部署k8s并配置Calico插件
2022/03/31 Servers