vue项目中图片预览旋转功能

最近项目中需要在图片预览时,可以旋转图片预览,在网上找了下,发现有一款功能强大的图片组件:viewerjs. git-hup: https://github.com/fengyuanchen/viewerjs

在git上看了下,有很多功能,不过我的项目只需要做个图片旋转功能,引入这个组件感觉大材小用了,于是自己写了个简易版的,因为我们只是查看而已,没什么要求.如果你需要比较精确的图片旋转功能,可以使用这个viewerjs组件

功能描述: 一个图片预览框,三个操作按钮: 上一张,下一张,旋转; 点击上一张下一张切换图片,点击旋转顺时针旋转图片,每次旋转90°,旋转后记住当前图片的旋转角度,点击上一张下一张再次切换回来时,需要旋转到上一次旋转的角度

代码:这是一个单独的组件,图片数据可以写在props中传值

<template>
  <div class="rotate_contanier">
    <div class="header">
      <span @click="handleImg(1)">上一张</span>
      <span @click="handleImg(2)">下一张</span>
      <span @click="rotate">旋转</span>
    </div>
    <div class="picture_contaner">
      <div class="img_box" ref="rotate">
        <img :src="fileInfo.fileUrl" >
      </div>
    </div>
  </div>
</template>

<script>
export default {
  props: {

  },
  data() {
    return {
      pictureList: [
        {fileUrl: ‘http://mp.ofweek.com/Upload/News/Img/member645/201711/17170046839337.jpg‘},
        {fileUrl: ‘http://img2.imgtn.bdimg.com/it/u=1239081181,1433383585&fm=26&gp=0.jpg‘},
        {fileUrl: ‘http://img1.imgtn.bdimg.com/it/u=3502008475,4132115356&fm=26&gp=0.jpg‘},
        {fileUrl: ‘http://img12.360buyimg.com/n5/s450x450_jfs/t9952/98/2269407420/279171/6137fe2f/59f28b2bN6959e086.jpg‘},
        {fileUrl: ‘http://img2.imgtn.bdimg.com/it/u=2681505513,370839281&fm=26&gp=0.jpg‘},
        {fileUrl: ‘http://img2.imgtn.bdimg.com/it/u=1153377230,3978893548&fm=26&gp=0.jpg‘}
      ],
      fileInfo: {
        fileUrl: ‘‘,
        deg: 0
      },
      currentPage: 0
    }
  },
  created() {
    // 设置图片初始旋转角度
    this.pictureList.forEach(item => {
      item.deg = 0
    })
    this.fileInfo = this.pictureList[this.currentPage]
  },
  mounted() {

  },
  methods: {
    handleImg (type) {
      if (type === 1) { // 上一张
        this.currentPage++
        if (this.currentPage >= this.pictureList.length) {
          this.currentPage = 0
        }
      } else { // 下一张
        this.currentPage--
        if (this.currentPage < 0) {
          this.currentPage = this.pictureList.length - 1
        }
      }
      // 获取图片当前信息
      this.fileInfo = this.pictureList[this.currentPage]
      this.$refs.rotate.style.transform = `rotate(${this.fileInfo.deg}deg)`
    },
    // 旋转图片
    rotate () {
      this.fileInfo = this.pictureList[this.currentPage]
      this.fileInfo.deg += 90
      if (this.fileInfo.deg >= 360) {
        this.fileInfo.deg = 0
      }
      this.$refs.rotate.style.transform = `rotate(${this.fileInfo.deg}deg)`
    }
  }
}
</script>

<style>
.rotate_contanier {
  display: flex;
  flex-direction: column;
  padding: 20px;
  background-color: #909399;
  width: 600px;
  height: 670px;
}
.header {
  height: 50px;
  margin-bottom: 10px;
  text-align: center;
  background-color: #fff;
  padding-top: 20px;
}
.header span {
  padding: 5px 8px;
  color: #fff;
  background-color: #409eff;
  border-radius: 4px;
  margin-right: 5px;
  cursor: pointer;
}
.picture_contaner {
  height: 600px;
  width: 100%;
  background-color: #fff;
  padding: 10px;
  box-sizing: border-box;
}
.picture_contaner .img_box {
  width: 100%;
  height: 100%;
  position: relative;
}
.picture_contaner .img_box img {
  max-width: 100%;
  max-height: 100%;
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  margin: auto;
}

</style>

实现思路: 旋转的时候需要把容器长宽设为一致,也就是图片容器为正方形,这样旋转的时候旋转中心是对称的,不会出现图片超出容器的情况.

把图片放到一个容器里装起来,图片的宽高不能超过容器的宽高,居中布局,旋转的时候旋转图片容器,这样图片的长宽对旋转不会有影响

最终效果:

   

    

图片为百度图片,如有侵权,请联系删除

原文地址:https://www.cnblogs.com/steamed-twisted-roll/p/11667219.html

时间: 2024-10-13 22:26:53

vue项目中图片预览旋转功能的相关文章

基于vue.js的图片预览组件2.0.1

基于vue.js的图片预览组件 Github github 安装 npm install enlargeimg --save-dev import enlargeimg from 'enlargeimg'; 基础用法 <enlargeImg :data="files"></enlargeImg> export default { name: 'hello', data () { return { msg: 'Welcome to Your Vue.js App'

微信企业号办公系统-图片预览放大功能-previewImage

在微信里看过文章的应该知道,文章里的图片点击后可以放大.分享和保存. 然而自己在微信里开发的网页,里面的图片点击后没办法实现这个效果,然后就去看了下微信JS文档,里面有个previewImage可以调用. previewImage是微信客户端给内置浏览器增加的一个Javascript Interface,通过调用这个API,可以调起微信客户端提供的大图片查看组件. 官方说明和例子: wx.previewImage({ current: '', // 当前显示图片的http链接 urls: []

vue 项目打包 本地预览

dist 目录需要启动一个 HTTP 服务器来访问 (除非你已经将 publicPath 配置为了一个相对的值),所以以 file:// 协议直接打开 dist/index.html 是不会工作的.在本地预览生产环境构建最简单的方式就是使用一个 Node.js 静态文件服务器,例如 serve: npm install -g serve # -s 参数的意思是将其架设在 Single-Page Application 模式下 # 这个模式会处理即将提到的路由问题 serve -s dist 原文

纯前端的图片预览

尊重原创,转载请注明来自:http://www.cnblogs.com/fsjohnhuang/p/3925827.html ^_^肥仔John 一.前言 图片上传是一个普通不过的功能,而图片预览就是就是上传功能中必不可少的子功能了.在这之前,我曾经通过订阅input[type=file]元素的onchange事件,一旦更改路径则将图片上传至服务器,接着就获取图片路径并赋值到img元素上.先不管文件异步提交的解决方案,就是服务端清理那些临时的预览图片已经增加不少工作量了. 偶然从MDN上找到纯前

前端图片预览,上传前预览,兼容IE7、8、9、10、11,Firefox,Chrome

在现在的Web开发中不可避免的会做一个图片预览的功能, 比如在上传图片的情况下,一个很简单的办法就是讲图片上传至服务器之后,再将文件的URL返回回来,然后异步通过这个URL加载刚刚上传的图片,实现图片的预览, 很明显的在这个过程中两次Web请求,一次发送文件,一次下载文件,到最后这个文件如果在客户端被删除(取消上传,弃用这次的上传), 这整个过程都白费了.我们希望能够在图片上传之前就能进行图片的预览,这样就避免了不必要的网络请求和时间等待. 在IE中有如下方式 var url; var file

文件上传之图片预览

一.业界现状分析 有时候我们需要在上传图片之前为用户提供图片预览的功能,HTML5规范出来之前,由于缺少原生的File API支持,我们需要借助Flash或者浏览器插件来满足这种需求.有了HTML5,我们可使用URL或者FileReader对象实现预览功能. 二.应用场景 图片分享类的应用,如Flickr,Facebook.相册应用,如:QQ相册. 虽然139邮箱没有合适的应用场景,但是可将技术预研的成果作为技术储备,好东西总有用得着的时候. 三.编码实现 方式一:window.URL (1).

JS魔法堂之实战:纯前端的图片预览

一.前言 图片上传是一个普通不过的功能,而图片预览就是就是上传功能中必不可少的子功能了.在这之前,我曾经通过订阅input[type=file]元素的onchange事件,一旦更改路径则将图片上传至服务器,接着就获取图片路径并赋值到img元素上.先不管文件异步提交的解决方案,就是服务端清理那些临时的预览图片已经增加不少工作量了. 偶然从MDN上找到纯前端图片预览的相关资料,经过整理后记录下来以便日后查阅. 二.准备功夫1──FileReader FileReader是HTML5的新特性,用于读取

图片上传前预览的功能

最近自己想做一个项目,涉及到很多图片上传和预览的功能,所以简单记录下: 这里我没有用vue的组件库,是单纯靠input来写出一个图片上传的功能. 思路是:先用input[type=file]来获取本地的图片,然后用HTML5的 File API 的 FileReader 图片本地转成base64格式的url,把这个url赋值到用于预览的src就好了. <div class="upload"> <div class="img-container"&g

angular中封装fancyBox(图片预览)

首先在官网下载最新版的fancyBox(一定要去最新网站,以前依赖的jquery版本偏低),附上链接:http://fancyapps.com/fancybox/3/ 然后在项目中引用jquery,然后在引用jquery.fancybox.min.css和jquery.fancybox.min.js. 如果需要动画和鼠标滚轮滚动效果还可以引入他提供的相关工具文件. 1.你可以通过链接.css和.js在你的html文件来安装fancyBox .确保您也加载了jQuery库.以下是用作示例的基本HT