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 相关文章推荐
JavaScript中的apply()方法和call()方法使用介绍
Jul 25 Javascript
javascript中interval与setTimeOut的区别示例介绍
Mar 14 Javascript
JS实现网站菜单拖拽移位效果的方法
Sep 24 Javascript
javascript实现的猜数小游戏完整实例代码
May 10 Javascript
浅谈Angular.js中使用$watch监听模型变化
Jan 10 Javascript
jQuery UI Grid 模态框中的表格实例代码
Apr 01 jQuery
Bootstrap3.3.7导航栏下拉菜单鼠标滑过展开效果
Oct 31 Javascript
仿淘宝JSsearch搜索下拉深度用法
Jan 15 Javascript
在vue项目中使用md5加密的方法
Sep 14 Javascript
vue elementUI使用tabs与导航栏联动
Jun 21 Javascript
layui 数据表格复选框实现单选功能的例子
Sep 19 Javascript
微信小程序抽奖组件的使用步骤
Jan 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
自定义php类(查找/修改)xml文档
2013/03/26 PHP
php检查字符串中是否包含7位GSM字符的方法
2015/03/17 PHP
php将HTML表格每行每列转为数组实现采集表格数据的方法
2015/04/03 PHP
php7 安装yar 生成docker镜像
2017/05/09 PHP
实例讲解PHP表单验证功能
2019/02/15 PHP
[原创]PHP global全局变量经典应用与注意事项分析【附$GLOBALS用法对比】
2019/07/12 PHP
jQuery 技巧大全(新手入门篇)
2009/05/12 Javascript
你需要知道的10个最佳javascript开发实践小结
2012/04/15 Javascript
jquery获取tr中控件值并操作tr实现思路
2013/03/27 Javascript
ExtJS DOM元素操作经验分享
2013/08/28 Javascript
javascript解决IE6下hover问题的方法
2015/07/28 Javascript
Node.js中路径处理模块path详解
2016/11/14 Javascript
浅析JavaScriptSerializer类的序列化与反序列化
2016/11/22 Javascript
bootstrap weebox 支持ajax的模态弹出框
2017/02/23 Javascript
Angularjs中使用指令绑定点击事件的方法
2017/03/30 Javascript
JS实现的模仿QQ头像资料卡显示与隐藏效果
2017/04/07 Javascript
IE11下使用canvas.toDataURL报SecurityError错误的解决方法
2017/11/19 Javascript
JavaScript类的继承操作实例总结
2018/12/20 Javascript
javascript自定义日期比较函数用法示例
2019/07/22 Javascript
[02:36]DOTA2英雄基础教程 帕格纳
2014/01/20 DOTA
Python 分析Nginx访问日志并保存到MySQL数据库实例
2014/03/13 Python
python获得文件创建时间和修改时间的方法
2015/06/30 Python
深入解析Python中函数的参数与作用域
2016/03/20 Python
Python turtle绘画象棋棋盘
2019/08/21 Python
Python识别html主要文本框过程解析
2020/02/18 Python
为什么称python为胶水语言
2020/06/16 Python
GAP欧盟网上商店:GAP EU
2016/09/13 全球购物
简历自荐信
2013/12/02 职场文书
简历中求职的个人自我评价
2013/12/03 职场文书
国贸类专业毕业生的求职信分享
2013/12/08 职场文书
外语系毕业生自荐信范文
2013/12/16 职场文书
思想专业自荐信范文
2013/12/25 职场文书
中学生检讨书1000字
2014/10/28 职场文书
员工升职自荐信
2015/03/27 职场文书
上手简单,功能强大的Python爬虫框架——feapder
2021/04/27 Python
浅谈CSS不规则边框的生成方案
2021/05/25 HTML / CSS