Vue拖動截圖功能的簡單實(shí)現(xiàn)方法
拖動鼠標(biāo)進(jìn)行頁面截圖(也可指定區(qū)域拖動截圖)
一、安裝html2canvas、vue-cropper
npm i html2canvas --save //用于將指定區(qū)域轉(zhuǎn)為圖片 npm i vue-cropper -S //將圖片進(jìn)行裁剪
二、在main.js注冊vue-cropper組件
import VueCropper from 'vue-cropper' Vue.use(VueCropper)
三、頁面中引入html2canvas
import html2canvas from "html2canvas" export default{ }
四、代碼分解
1、將指定區(qū)域轉(zhuǎn)為圖片
this.$nextTick(()=>{ html2canvas(document.body,{}).then(canvas => { let dataURL = canvas.toDataURL("image/png"); this.uploadImg = dataURL this.loading = true }); })
這里是將body整個(gè)頁面轉(zhuǎn)為圖片,得到base64格式數(shù)據(jù),其他區(qū)域直接獲取class或者id
2、將生成的圖片進(jìn)行拖動截圖
<template> <div class="pop_alert" v-if="show"> <vueCropper @mouseenter.native="enter" @mouseleave.native="leave" ref="cropper" :img="uploadImg" :outputSize="option.size" :outputType="option.outputType" :info="true" :full="option.full" :canMove="option.canMove" :canMoveBox="option.canMoveBox" :original="option.original" :autoCrop="option.autoCrop" :fixed="option.fixed" :fixedNumber="option.fixedNumber" :centerBox="option.centerBox" :infoTrue="option.infoTrue" :fixedBox="option.fixedBox" style="background-image:none" ></vueCropper> <div class="btn_box"> <div @click="save">確認(rèn)截圖</div> <div @click="close">取消</div> </div> </div> </template> <script> export default{ data(){ option: { info: true, // 裁剪框的大小信息 outputSize: 0.8, // 裁剪生成圖片的質(zhì)量 outputType: "jpeg", // 裁剪生成圖片的格式 canScale: false, // 圖片是否允許滾輪縮放 autoCrop: false, // 是否默認(rèn)生成截圖框 fixedBox: false, // 固定截圖框大小 不允許改變 fixed: false, // 是否開啟截圖框?qū)捀吖潭ū壤? fixedNumber: [7, 5], // 截圖框的寬高比例 full: true, // 是否輸出原圖比例的截圖 canMove: false, //時(shí)候可以移動原圖 canMoveBox: true, // 截圖框能否拖動 original: false, // 上傳圖片按照原始比例渲染 centerBox: false, // 截圖框是否被限制在圖片里面 infoTrue: true // true 為展示真實(shí)輸出圖片寬高 false 展示看到的截圖框?qū)捀? }, uploadImg:"", show: false }, methods:{ enter() { if (this.uploadImg == "") { return; } this.$refs.cropper.startCrop(); //開始裁剪 }, leave() { this.$refs.cropper.stopCrop();//停止裁剪 }, save() { //確認(rèn)截圖 this.$refs.cropper.getCropData((data) => { //獲取截圖的base64格式數(shù)據(jù) console.log(data) this.show = false }) // this.$refs.cropper.getCropBlob(data => { //獲取截圖的Blob格式數(shù)據(jù) // this.cutImg = data; // }); }, close(){ //取消 this.show = false } } } </script>
五、全部代碼
<template> <div> <div @click="tailoring">裁剪</div> <!--繼續(xù)寫頁面的其他內(nèi)容 pop_alert可封裝成組件使用--> <div class="pop_alert" v-if="show"> <vueCropper @mouseenter.native="enter" @mouseleave.native="leave" ref="cropper" :img="uploadImg" :outputSize="option.size" :outputType="option.outputType" :info="true" :full="option.full" :canMove="option.canMove" :canMoveBox="option.canMoveBox" :original="option.original" :autoCrop="option.autoCrop" :fixed="option.fixed" :fixedNumber="option.fixedNumber" :centerBox="option.centerBox" :infoTrue="option.infoTrue" :fixedBox="option.fixedBox" style="background-image:none" ></vueCropper> <div class="btn_box"> <div @click="save">確認(rèn)截圖</div> <div @click="close">取消</div> </div> </div> </div> </template> <script> import html2canvas from "html2canvas" export default{ data(){ return{ option: { info: true, // 裁剪框的大小信息 outputSize: 0.8, // 裁剪生成圖片的質(zhì)量 outputType: "jpeg", // 裁剪生成圖片的格式 canScale: false, // 圖片是否允許滾輪縮放 autoCrop: false, // 是否默認(rèn)生成截圖框 fixedBox: false, // 固定截圖框大小 不允許改變 fixed: false, // 是否開啟截圖框?qū)捀吖潭ū壤? fixedNumber: [7, 5], // 截圖框的寬高比例 full: true, // 是否輸出原圖比例的截圖 canMove: false, //時(shí)候可以移動原圖 canMoveBox: true, // 截圖框能否拖動 original: false, // 上傳圖片按照原始比例渲染 centerBox: false, // 截圖框是否被限制在圖片里面 infoTrue: true // true 為展示真實(shí)輸出圖片寬高 false 展示看到的截圖框?qū)捀? }, uploadImg:"", show: false } }, methods:{ tailoring(){ //裁剪 this.$nextTick(()=>{ html2canvas(document.body,{}).then(canvas => { let dataURL = canvas.toDataURL("image/png"); this.uploadImg = dataURL this.show = true }); }) }, enter() { if (this.uploadImg == "") { return; } this.$refs.cropper.startCrop(); //開始裁剪 }, leave() { this.$refs.cropper.stopCrop();//停止裁剪 }, save() { //確認(rèn)截圖 this.$refs.cropper.getCropData((data) => { //獲取截圖的base64格式數(shù)據(jù) console.log(data) this.show = false }) // this.$refs.cropper.getCropBlob(data => { //獲取截圖的Blob格式數(shù)據(jù) // this.cutImg = data; // }); }, close(){ //取消 this.show = false } } } </script> <style> .pop_alert{ width: 100%; height: 100%; position: absolute; top: 0; left: 0; border: 1px dashed red; background-color: #000000; } .btn_box{ position: absolute; top: 0; color: red; right: 0; font-size: 30px; display: flex; align-items: center; z-index: 6666; } </style>
效果圖
總結(jié)
到此這篇關(guān)于Vue拖動截圖功能實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Vue拖動截圖功能內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- JS實(shí)現(xiàn)預(yù)加載視頻音頻/視頻獲取截圖(返回canvas截圖)
- vue項(xiàng)目中canvas實(shí)現(xiàn)截圖功能
- vue3如何將html元素變成canvas(海報(bào)生成),進(jìn)行圖片保存/截圖
- 原生js基于canvas實(shí)現(xiàn)一個(gè)簡單的前端截圖工具代碼實(shí)例
- 微信小程序canvas拖拽、截圖組件功能
- JavaScript+html5 canvas實(shí)現(xiàn)本地截圖教程
- vue 實(shí)現(xiàn)網(wǎng)頁截圖功能詳解
- 如何用vue實(shí)現(xiàn)網(wǎng)頁截圖你知道嗎
- vue 實(shí)現(xiàn)無規(guī)則截圖
- electron+vue實(shí)現(xiàn)div contenteditable截圖功能
- Vue+canvas實(shí)現(xiàn)視頻截圖功能
相關(guān)文章
Vue+Echarts實(shí)現(xiàn)分時(shí)圖和交易量圖的繪制
近來發(fā)現(xiàn)Echarts?API越發(fā)的強(qiáng)大,對于繪制各類圖形可以使用Echarts實(shí)現(xiàn)。本文將利用Echarts實(shí)現(xiàn)分時(shí)圖和交易量圖的繪制,希望對大家有所幫助2023-03-03Vue中的 mixins 和 provide/inject詳解
這篇文章主要介紹了Vue中的 mixins 和 provide/inject詳解,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07詳解vue+vuex+koa2開發(fā)環(huán)境搭建及示例開發(fā)
本篇文章主要介紹了詳解vue + vuex + koa2開發(fā)環(huán)境搭建及示例開發(fā),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-01-01Vue.js中使用${}實(shí)現(xiàn)變量和字符串的拼接方式
這篇文章主要介紹了Vue.js中使用${}實(shí)現(xiàn)變量和字符串的拼接方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07教你三分鐘掌握Vue過濾器filters及時(shí)間戳轉(zhuǎn)換
這篇文章教你三分鐘掌握Vue過濾器filters及時(shí)間戳轉(zhuǎn)換,本文將結(jié)合時(shí)間戳轉(zhuǎn)換的例子帶你快速了解filters的用法,需要的朋友可以參考下2023-03-03