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 相关文章推荐
jQuery第三课 修改元素属性及内容的代码
Mar 14 Javascript
利用js 进行输入框自动匹配字符的小例子
Jun 29 Javascript
jQuery+ajax实现鼠标单击修改内容的思路
Jun 29 Javascript
jquery实现多行文字图片滚动效果示例代码
Oct 10 Javascript
js获取当前日期时间及其它操作汇总
Apr 17 Javascript
javascript拖拽效果延伸学习
Apr 04 Javascript
el表达式 写入bootstrap表格数据页面的实例代码
Jan 11 Javascript
微信小程序自定义tabBar组件开发详解
Sep 24 Javascript
vue请求服务器数据后绑定不上的解决方法
Oct 30 Javascript
prettier自动格式化去换行的实现代码
Aug 25 Javascript
Element-UI 使用el-row 分栏布局的教程
Oct 26 Javascript
什么是SOLID
Mar 24 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
给海燕B411配件机起死回生配上件
2021/03/02 无线电
php防攻击代码升级版
2010/12/29 PHP
php class类的用法详细总结
2013/10/17 PHP
PHP+Memcache实现wordpress访问总数统计(非插件)
2014/07/04 PHP
php简单实现批量上传图片的方法
2016/05/09 PHP
PHP文件操作详解
2016/12/30 PHP
PHP7实现和CryptoJS的AES加密方式互通示例【AES-128-ECB加密】
2019/06/08 PHP
a标签的css样式四个状态
2021/03/09 HTML / CSS
popdiv
2006/07/14 Javascript
JavaScript Perfection kill 测试及答案
2010/03/23 Javascript
js打印纸函数代码(递归)
2010/06/18 Javascript
javascript日期格式化示例分享
2014/03/05 Javascript
js 中文汉字转Unicode、Unicode转中文汉字、ASCII转换Unicode、Unicode转换ASCII、中文转换
2016/12/06 Javascript
bootstrap滚动监控器使用方法解析
2017/01/13 Javascript
assert()函数用法总结(推荐)
2017/01/25 Javascript
大白话讲解JavaScript的Promise
2017/04/06 Javascript
JS匹配日期和时间的正则表达式示例
2017/05/12 Javascript
微信小程序调用摄像头隐藏式拍照功能
2018/08/22 Javascript
Async/Await替代Promise的6个理由
2019/06/15 Javascript
haskell实现多线程服务器实例代码
2013/11/26 Python
用Python编写一个简单的Lisp解释器的教程
2015/04/03 Python
Python3中的2to3转换工具使用示例
2015/06/12 Python
python+matplotlib绘制旋转椭圆实例代码
2018/01/12 Python
Python实现PS滤镜特效之扇形变换效果示例
2018/01/26 Python
win10下tensorflow和matplotlib安装教程
2018/09/19 Python
Django ManyToManyField 跨越中间表查询的方法
2018/12/18 Python
悬挂训练绳:TRX
2017/12/14 全球购物
英国翻新电子产品购物网站:Tech Trade
2017/12/25 全球购物
英国珠宝钟表和家居礼品精品店:David Shuttle
2018/02/24 全球购物
医科学校毕业生自荐信
2013/11/09 职场文书
女方回门宴答谢词
2014/01/14 职场文书
文化与传播毕业生求职信
2014/03/09 职场文书
教师节宣传方案
2014/05/23 职场文书
开工典礼策划方案
2014/05/23 职场文书
《揠苗助长》教学反思
2016/02/20 职场文书
vue修饰符.capture和.self的区别
2022/04/22 Vue.js