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 相关文章推荐
jqgrid 简单学习笔记
May 03 Javascript
IE6背景图片不缓存问题解决方案及图片使用策略多个方法小结
May 14 Javascript
动态添加option及createElement使用示例
Jan 26 Javascript
node.js中的forEach()是同步还是异步呢
Jan 29 Javascript
深入理解JavaScript系列(47):对象创建模式(上篇)
Mar 04 Javascript
详解javascript跨浏览器事件处理程序
Mar 27 Javascript
javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】
Dec 15 Javascript
EasyUI学习之Combobox下拉列表(1)
Dec 29 Javascript
Angular 4 依赖注入学习教程之FactoryProvider的使用(四)
Jun 04 Javascript
layui中layer前端组件实现图片显示功能的方法分析
Oct 13 Javascript
如何实现双向绑定mvvm的原理实现
May 28 Javascript
vue实践---vue不依赖外部资源实现简单多语操作
Sep 21 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
《Re:从零开始的异世界生活》剧情体验,手游新作定名
2020/04/09 日漫
PHP实现递归复制整个文件夹的类实例
2015/08/03 PHP
Yii2 如何在modules中添加验证码的方法
2017/06/19 PHP
javaScript 读取和设置文档元素的样式属性
2009/04/14 Javascript
用js实现的模拟jquery的animate自定义动画(2.5K)
2010/07/20 Javascript
JavaScript代码简单实现求杨辉三角给定行的最大值
2013/10/29 Javascript
JavaScript在for循环中绑定事件解决事件参数不同的情况
2014/01/20 Javascript
JS实现鼠标单击与双击事件共存
2014/03/08 Javascript
用简洁的jQuery方法toggleClass实现隔行换色
2014/10/22 Javascript
Javascript BOM学习小结(六)
2015/11/26 Javascript
Angular.js与Bootstrap相结合实现表格分页代码
2016/04/12 Javascript
基于JS实现导航条之调用网页助手小精灵的方法
2016/06/17 Javascript
JS构造函数与原型prototype的区别介绍
2016/07/04 Javascript
Dropzone.js实现文件拖拽上传功能(附源码下载)
2016/11/22 Javascript
JavaScript中附件预览功能实现详解(推荐)
2017/08/15 Javascript
JavaScript插入排序算法原理与实现方法示例
2018/08/06 Javascript
vue webpack开发访问后台接口全局配置的方法
2018/09/18 Javascript
微信小程序的tab选项卡的实现效果
2019/05/15 Javascript
vue项目实现多语言切换的思路
2020/09/17 Javascript
解决Element中el-date-picker组件不回填的情况
2020/11/07 Javascript
通过python+selenium3实现浏览器刷简书文章阅读量
2017/12/26 Python
Python3爬取英雄联盟英雄皮肤大图实例代码
2018/11/14 Python
python爬虫爬取微博评论案例详解
2019/03/27 Python
Python脚本实现Zabbix多行日志监控过程解析
2020/08/26 Python
HTML5 拖拽批量上传文件的示例代码
2018/03/28 HTML / CSS
美国摄影爱好者购物网站:Focus Camera
2016/10/21 全球购物
Under Armour安德玛法国官网:美国高端运动科技品牌
2018/06/29 全球购物
英国折扣零售连锁店:QD Stores
2018/12/08 全球购物
Vuori官网:运动服装的终级表现
2021/01/27 全球购物
初中生三年学习生活的自我评价
2013/11/03 职场文书
大学毕业生求职自荐信
2014/02/20 职场文书
法人授权委托书格式
2014/04/08 职场文书
2014党员自我评议表范文
2014/09/20 职场文书
银行工作心得体会范文
2016/01/23 职场文书
详解Apache SkyWalking 告警配置指南
2021/04/22 Servers
使用react-virtualized实现图片动态高度长列表的问题
2021/05/28 Javascript