Vue拖動截圖功能的簡單實現(xiàn)方法
拖動鼠標進行頁面截圖(也可指定區(qū)域拖動截圖)
一、安裝html2canvas、vue-cropper
npm i html2canvas --save //用于將指定區(qū)域轉(zhuǎn)為圖片 npm i vue-cropper -S //將圖片進行裁剪
二、在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整個頁面轉(zhuǎn)為圖片,得到base64格式數(shù)據(jù),其他區(qū)域直接獲取class或者id
2、將生成的圖片進行拖動截圖
<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">確認截圖</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, // 是否默認生成截圖框
fixedBox: false, // 固定截圖框大小 不允許改變
fixed: false, // 是否開啟截圖框?qū)捀吖潭ū壤?
fixedNumber: [7, 5], // 截圖框的寬高比例
full: true, // 是否輸出原圖比例的截圖
canMove: false, //時候可以移動原圖
canMoveBox: true, // 截圖框能否拖動
original: false, // 上傳圖片按照原始比例渲染
centerBox: false, // 截圖框是否被限制在圖片里面
infoTrue: true // true 為展示真實輸出圖片寬高 false 展示看到的截圖框?qū)捀?
},
uploadImg:"",
show: false
},
methods:{
enter() {
if (this.uploadImg == "") {
return;
}
this.$refs.cropper.startCrop(); //開始裁剪
},
leave() {
this.$refs.cropper.stopCrop();//停止裁剪
},
save() { //確認截圖
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">確認截圖</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, // 是否默認生成截圖框
fixedBox: false, // 固定截圖框大小 不允許改變
fixed: false, // 是否開啟截圖框?qū)捀吖潭ū壤?
fixedNumber: [7, 5], // 截圖框的寬高比例
full: true, // 是否輸出原圖比例的截圖
canMove: false, //時候可以移動原圖
canMoveBox: true, // 截圖框能否拖動
original: false, // 上傳圖片按照原始比例渲染
centerBox: false, // 截圖框是否被限制在圖片里面
infoTrue: true // true 為展示真實輸出圖片寬高 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() { //確認截圖
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拖動截圖功能實現(xiàn)的文章就介紹到這了,更多相關(guān)Vue拖動截圖功能內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- JS實現(xiàn)預加載視頻音頻/視頻獲取截圖(返回canvas截圖)
- vue項目中canvas實現(xiàn)截圖功能
- vue3如何將html元素變成canvas(海報生成),進行圖片保存/截圖
- 原生js基于canvas實現(xiàn)一個簡單的前端截圖工具代碼實例
- 微信小程序canvas拖拽、截圖組件功能
- JavaScript+html5 canvas實現(xiàn)本地截圖教程
- vue 實現(xiàn)網(wǎng)頁截圖功能詳解
- 如何用vue實現(xiàn)網(wǎng)頁截圖你知道嗎
- vue 實現(xiàn)無規(guī)則截圖
- electron+vue實現(xiàn)div contenteditable截圖功能
- Vue+canvas實現(xiàn)視頻截圖功能
相關(guān)文章
Vue+Echarts實現(xiàn)分時圖和交易量圖的繪制
近來發(fā)現(xiàn)Echarts?API越發(fā)的強大,對于繪制各類圖形可以使用Echarts實現(xiàn)。本文將利用Echarts實現(xiàn)分時圖和交易量圖的繪制,希望對大家有所幫助2023-03-03
Vue中的 mixins 和 provide/inject詳解
這篇文章主要介紹了Vue中的 mixins 和 provide/inject詳解,本文結(jié)合實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-07-07
詳解vue+vuex+koa2開發(fā)環(huán)境搭建及示例開發(fā)
本篇文章主要介紹了詳解vue + vuex + koa2開發(fā)環(huán)境搭建及示例開發(fā),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-01-01
Vue.js中使用${}實現(xiàn)變量和字符串的拼接方式
這篇文章主要介紹了Vue.js中使用${}實現(xiàn)變量和字符串的拼接方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07
教你三分鐘掌握Vue過濾器filters及時間戳轉(zhuǎn)換
這篇文章教你三分鐘掌握Vue過濾器filters及時間戳轉(zhuǎn)換,本文將結(jié)合時間戳轉(zhuǎn)換的例子帶你快速了解filters的用法,需要的朋友可以參考下2023-03-03

