vue點擊圖片預覽放大(可旋轉、翻轉、縮放、上下切換、鍵盤操做)

 viewerjs ,GitHub地址:https://github.com/fengyuanchen/viewerjs css

中文文檔地址:https://mirari.cc/2017/08/27/Vue圖片瀏覽組件v-viewer,支持旋轉、縮放、翻轉等操做/html

Vue圖片瀏覽組件v-viewer,支持旋轉、縮放、翻轉等操做

 發表於 2017-08-27 |  分類於 項目 , Vue |  vue

v-viewer

用於圖片瀏覽的Vue組件,支持旋轉、縮放、翻轉等操做,基於viewer.jsgit

npm version

在線演示

CodePen用例

從0.x遷移

你須要作的惟一改動就是手動引入樣式文件:github

1
import 'viewerjs/dist/viewer.css'

 

安裝

使用npm命令安裝npm

1
npm install v-viewer

 

使用

引入v-viewer及必需的css樣式,並使用Vue.use()註冊插件,以後便可使用。app

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<template>
  <div id="app">
    <!-- directive -->
    <div class="images" v-viewer>
      <img src="1.jpg">
      <img src="2.jpg">
      ...
    </div>
    <!-- component -->
    <viewer :images="images">
      <img v-for="src in images" :src="src" :key="src">
    </viewer>
  </div>
</template>
<script>
  import 'viewerjs/dist/viewer.css'
  import Viewer from 'v-viewer'
  import Vue from 'vue'
  Vue.use(Viewer)
  export default {
    data() {
      images: ['1.jpg', '2.jpg']
    }
  }
</script>

以指令形式使用

只須要將v-viewer指令添加到任意元素便可,該元素下的全部img元素都會被viewer自動處理。ide

你能夠像這樣傳入配置項: v-viewer="{inline: true}"svg

若是有必要,能夠先用選擇器查找到目標元素,而後能夠用el.$viewer來獲取viewer實例。ui

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<template>
  <div id="app">
    <div class="images" v-viewer="{movable: false}">
      <img v-for="src in images" :src="src" :key="src">
    </div>
    <button type="button" @click="show">Show</button>
  </div>
</template>
<script>
  import 'viewerjs/dist/viewer.css'
  import Viewer from 'v-viewer'
  import Vue from 'vue'
  Vue.use(Viewer)
  export default {
    data() {
      images: ['1.jpg', '2.jpg']
    },
    methods: {
      show () {
        const viewer = this.$el.querySelector('.images').$viewer
        viewer.show()
      }
    }
  }
</script>

指令修飾器

static

添加修飾器後,viewer的建立只會在元素綁定指令時執行一次。
若是你肯定元素內的圖片不會再發生變化,使用它能夠避免沒必要要的重建動做。

1
2
3
<div class="images" v-viewer.static="{inline: true}">
  <img v-for="src in images" :src="src" :key="src">
</div>

以組件形式使用

你也能夠單獨引入全屏組件並局部註冊它。

使用做用域插槽來定製你的圖片展現方式。

監聽inited事件來獲取viewer實例,或者也能夠用this.refs.xxx.$viewer這種方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<template>
  <div id="app">
    <viewer :options="options" :images="images"
            @inited="inited"
            class="viewer" ref="viewer"
    >
      <template scope="scope">
        <img v-for="src in scope.images" :src="src" :key="src">
        {{scope.options}}
      </template>
    </viewer>
    <button type="button" @click="show">Show</button>
  </div>
</template>
<script>
  import 'viewerjs/dist/viewer.css'
  import Viewer from "v-viewer/src/component.vue"
  export default {
    components: {
      Viewer
    },
    data() {
      images: ['1.jpg', '2.jpg']
    },
    methods: {
      inited (viewer) {
        this.$viewer = viewer
      },
      show () {
        this.$viewer.show()
      }
    }
  }
</script>

配置項 & 方法

請參考viewer.js.

插件配置項

name

  • Type: String
  • Default: viewer

若是你須要避免重名衝突,能夠像這樣引入:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<template>
  <div id="app">
    <div class="images" v-vuer="{movable: false}">
      <img v-for="src in images" :src="src" :key="src">
    </div>
    <button type="button" @click="show">Show</button>
  </div>
</template>
<script>
  import 'viewerjs/dist/viewer.css'
  import Vuer from 'v-viewer'
  import Vue from 'vue'
  Vue.use(Vuer, {name: 'vuer'})
  export default {
    data() {
      images: ['1.jpg', '2.jpg']
    },
    methods: {
      show () {
        const vuer = this.$el.querySelector('.images').$vuer
        vuer.show()
      }
    }
  }
</script>

defaultOptions

  • Type: Object
  • Default: undefined

若是你須要修改viewer.js的全局默認配置項,能夠像這樣引入:

1
2
3
4
5
6
7
import Viewer from 'v-viewer'
import Vue from 'vue'
Vue.use(Viewer, {
  defaultOptions: {
    zIndex: 9999
  }
})

你還能夠在任什麼時候候像這樣修改全局默認配置項:

1
2
3
4
5
6
import Viewer from 'v-viewer'
import Vue from 'vue'
Vue.use(Viewer)
Viewer.setDefaults({
  zIndexInline: 2017
})
相關文章
相關標籤/搜索