vue-preview动态获取图片宽高并增加旋转功能的实现


Posted in Javascript onJuly 29, 2020

vue-preview是一个常用的图片查看器,微博网页版就是用的这个插件:

vue-preview动态获取图片宽高并增加旋转功能的实现

我在项目中也用过这个插件,总体来说,还是比较满意。但是缺少一个图片旋转功能。

安装使用

第一步:安装

npm i vue-preview -S

第二步:引用配置

import VuePreview from 'vue-preview'
Vue.use(VuePreview)
Vue.use(preview, {
 mainClass: 'pswp--minimal--dark',
 barsSize: {top: 0, bottom: 0},
 captionEl: false,
 fullscreenEl: false,
 shareEl: false,
 bgOpacity: 0.85,
 tapToClose: true,
 tapToToggleControls: false
})

第三步:使用

// 定义预览图片列表
previewlist: [
  {
    src: ‘./pic01.jpg',
    w: 1200,
    h: 900
  },
  {
    src: ‘./pic01.jpg',
    w: 1200,
    h: 900
  }
]
 
// 给图片添加“preview-img”类(必须添加且要同名),以及绑定“show”方法
<img :src="decodeURIComponent(item.name)" class="preview-img" @click="show(index)">
 
// 点击图片触发预览方法
show (index) {
  this.$preview.open(index, this. previewlist);
}

动态获取图片宽高

如果图片列表资源是从服务器获取,则需要先获取图片的真实宽高,具体代码如下:

this. previewlist = []; //查看列表
let imglist = […]; //从服务器获取的图片地址列表
show (index) {
  for (let i = 0; i < imglist.length; i++) {
    // 获取图片实际大小
    let newImage = {};
    let img = new Image();
    img.src = imglist[i];
    img.onload = function () {
      newImage.src = imglist[i];
      newImage.w = img.width;
      newImage.h = img.height;
    };
    this.previewlist.push(newImage);
  }
  // 正常情况下javascript都是按照顺序执行的。但是我们可能让该语句后面的语句执行完再执行本身,用setTimeout延时0ms来实现。
  setTimeout(() => {
    this.$preview.open(index, this.previewlist);
  }, 0);
}

新增图片旋转功能

默认的功能有全屏、放大、分享、图片切换等,有时候我们还需要图片旋转功能,怎么办呢?那只能自己动手改插件了。

第一步:添加旋转图标

图标文件路径:node_modules\photoswipe\dist\default-skin

vue-preview动态获取图片宽高并增加旋转功能的实现

原来只有前面8个图片,后面那个稍微大一点的旋转图标是我加上去的,当然你也可以把尺寸设置为和原来的一样。

第二步:添加旋转按钮到页面

页面文件路径:node_modules\vue-preview\src\plugins\preview\preview.vue

<button class="pswp__button pswp__button--rotate" title="旋转" @click="imgRotateFn"></button>

第三步:添加旋转按钮的样式

样式文件路径:node_modules\photoswipe\dist\default-skin

.pswp__button--rotate {
 background-position: -176px 0;
}

第四步:实现旋转方法

文件路径:node_modules\vue-preview\src\plugins\preview\preview.vue

imgRotateFn () {
   this.angle+=90;
   let imgNode = document.getElementsByClassName('pswp__img');
   for (let i = 0; i<imgNode.length; i++) {
      imgNode[i].style.WebkitTransform = 'rotate('+this.angle+'deg)';
   }
 }

这里我只贴出了关键代码,需要你自己做浏览器兼容,以及切换图片时,应该将图片角度设置为0等。

测试结果

vue-preview动态获取图片宽高并增加旋转功能的实现

vue-preview动态获取图片宽高并增加旋转功能的实现

测试没有问题,终于可以下班了,哈哈哈。

Tips:懒得自己动手改插件的伙伴,可以在楼主的GitHub仓库下载改好后的文件,在你安装好 vue-preview 后用“attachment”文件夹中的三个文件替换你项目中的对应文件就拥有“旋转”功能了。GitHub地址:https://github.com/xiongjun0812/vue-preview

今天就分享到这里,有问题欢迎留言交流,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
apycom出品的jQuery精美菜单破解方法
Feb 18 Javascript
Javascript和HTML5利用canvas构建Web五子棋游戏实现算法
Jul 17 Javascript
js动态添加onclick事件可传参数与不传参数
Jul 29 Javascript
js获取浏览器基本信息大全
Nov 27 Javascript
JS实用的动画弹出层效果实例
May 05 Javascript
JS基于clipBoard.js插件实现剪切、复制、粘贴
May 03 Javascript
js 数据存储和DOM编程
Feb 09 Javascript
使用mock.js随机数据和使用express输出json接口的实现方法
Jan 07 Javascript
elementUI中Table表格问题的解决方法
Dec 04 Javascript
JsonServer安装及启动过程图解
Feb 28 Javascript
vue-cli3中配置alias和打包加hash值操作
Sep 04 Javascript
JavaScript 判断数据类型的4种方法
Sep 11 Javascript
vuex管理状态仓库使用详解
Jul 29 #Javascript
解决vue项目获取dom元素宽高总是不准确问题
Jul 29 #Javascript
如何使用three.js 制作一个三维的推箱子游戏
Jul 29 #Javascript
Vue实现input宽度随文字长度自适应操作
Jul 29 #Javascript
vue 判断元素内容是否超过宽度的方式
Jul 29 #Javascript
在vue中实现给每个页面顶部设置title
Jul 29 #Javascript
vue实现移动端项目多行文本溢出省略
Jul 29 #Javascript
You might like
php4的session功能评述(一)
2006/10/09 PHP
基于PHP的cURL快速入门教程 (小偷采集程序)
2011/06/02 PHP
php遍历数组的方法分享
2012/03/22 PHP
ThinkPHP3.2.1图片验证码实现方法
2016/08/19 PHP
php+ajax 文件上传代码实例
2019/03/18 PHP
TP5框架简单登录功能实现方法示例
2019/10/31 PHP
PHP autoload使用方法及步骤详解
2020/09/05 PHP
JavaScript 弹出窗体点击按钮返回选择数据的实现
2010/04/01 Javascript
DOM Scripting中的图片切换[兼容Firefox]
2010/06/12 Javascript
Javascript图像处理—平滑处理实现原理
2012/12/28 Javascript
浅谈Javascript中的Function与Object
2015/01/26 Javascript
jquery获得当前html页面源码的方法
2015/07/14 Javascript
javascript添加前置0(补零)的几种方法
2017/01/05 Javascript
js 颜色选择插件
2017/01/23 Javascript
javascript事件的绑定基础实例讲解(34)
2017/02/14 Javascript
最基础的vue.js双向绑定操作
2017/08/23 Javascript
vue自定义指令用法经典实例小结
2019/03/16 Javascript
layer弹出层倒计时关闭的实现方法
2019/09/27 Javascript
JsonProperty 的使用方法详解
2019/10/11 Javascript
Vue+Element自定义纵向表格表头教程
2020/10/26 Javascript
[47:12]TFT vs Secret Supermajor小组赛C组 BO3 第三场 6.3
2018/06/04 DOTA
[03:00]DOTA2-DPC中国联赛1月18日Recap集锦
2021/03/11 DOTA
Python中针对函数处理的特殊方法
2014/03/06 Python
Python过滤函数filter()使用自定义函数过滤序列实例
2014/08/26 Python
简单介绍Python中的JSON使用
2015/04/28 Python
利用Python如何实现一个小说网站雏形
2018/11/23 Python
Python 类属性与实例属性,类对象与实例对象用法分析
2019/09/20 Python
详解python如何引用包package
2020/06/07 Python
如何在Win10系统使用Python3连接Hive
2020/10/15 Python
文秘专业应届生求职信范文
2013/11/14 职场文书
离婚协议书范文2014
2014/10/16 职场文书
初中重阳节活动总结
2015/05/05 职场文书
入党后的感想
2015/08/10 职场文书
爱国主义教育主题班会
2015/08/13 职场文书
国庆节主题班会
2015/08/15 职场文书
MySQL中优化SQL语句的方法(show status、explain分析服务器状态信息)
2022/04/09 MySQL