Vue directive自定義指令+canvas實現H5圖片壓縮上傳-Base64格式
前言
最近優化專案-手機拍照圖片太大,回顯速度比較慢,使用了vue的自定義指令實現H5壓縮上傳base64格式的圖片canvas自定義指令
Vue.directive("canvas", {
bind: function (el, binding) {
// 壓縮圖片需要的一些元素和物件
var reader = new FileReader(), img = new Image();
// 選擇的檔案物件
var file = null;
// 縮放圖片需要的canvas
var canvas = document.createElement('canvas' );
var context = canvas.getContext('2d');
// base64地址圖片載入完畢後
img.onload = function () {
// 圖片原始尺寸
var originWidth = this.width;
var originHeight = this.height;
//比例壓縮
var rate = 0.4;
var targetWidth = originWidth * rate, targetHeight = originHeight * rate;
// canvas對圖片進行縮放
canvas.width = targetWidth;
canvas.height = targetHeight;
// 清除畫布
context.clearRect(0, 0, targetWidth, targetHeight);
// 圖片壓縮
context.drawImage(img, 0, 0, targetWidth, targetHeight);
// canvas轉為blob並上傳
$.ajax({
url: 'user/upload/base64' ,
type: 'post',
data: {
file: canvas.toDataURL("image/jpeg", 0.7)
},
success: binding.value,
error: function (e) {
alert(e.status);
}
})
};
// 檔案base64化,以便獲知圖片原始尺寸
reader.onload = function(e) {
img.src = e.target.result;
};
el.addEventListener('change', function (event) {
file = event.target.files[0];
// 選擇的檔案是圖片
if (file.type.indexOf("image") == 0) {
reader.readAsDataURL(file);
}
});
}
});
- HTML
<div id="_upload">
<i v-on:click="upload">自定義上傳檔案樣式</i>
<input id="_file" v-canvas="success" style="display: none;"/>
</div>
- JS
var uploadVue = new Vue({
el: '#_upload',
methods: {
upload: function () {
$("#_file").click();
},
success: function (data) {
//處理上傳圖片成功Ajax回撥
}
}
});
結束
demo同時依賴Vue和Jquery, 同時要求後臺可以處理base64的檔案流,如果有問題歡迎評論,會及時回覆。
相關推薦
Vue directive自定義指令+canvas實現H5圖片壓縮上傳-Base64格式
前言 最近優化專案-手機拍照圖片太大,回顯速度比較慢,使用了vue的自定義指令實現H5壓縮上傳base64格式的圖片 canvas自定義指令 Vue.directive("canvas",
Vue.directive 自定義指令的問題
script new amp bsp binding 官網 文件 技術分享 post 1.今天復習一下Vue自定義指令的代碼,結果出現一個很無語的結果,先貼代碼。 2. <div id="example" v-change-by="myColor"><
挖坑指南:Vue.directive()自定義指令的實踐(含原始碼)
前言 迫不及待想要上車試一試,直接貼程式碼吧。 開始 兩個小例子,圖片的載入優化以及第三方外掛的配合使用。參考的資料在我分享的這篇博文中有記錄,感興趣的同學,可以參考更多。 <!DOCTYPE html> <html lang="en"> <hea
Vue.directive 自定義指令
一、什麼是全域性API? 全域性API並不在構造器裡,而是先宣告全域性變數或者直接在Vue上定義一些新功能,Vue內建了一些全域性API,比如我們今天要學習的指令Vue.directive。說的簡單些就是,在構造器外部用Vue提供給我們的API函式來定義新的功能。
H5+jqweui實現手機端圖片壓縮上傳 Base64
主要功能,使用H5的formData上傳base64格式的圖片,canvas壓縮圖片,前端樣式使用weui,為方便起見,使用了jquery封裝過的weui,jqweui。話不多少,開始上程式碼。前端程式碼,直接在jqweui官網下的demo裡改的(是dist下的demo)<!DOCTYPE html&g
h5圖片壓縮上傳
1.做這個確實有必要的,有的手機拍出來的照片很大,然後加上網速一般,上傳很慢,一直等待,好不容易等到資源上傳時間結束了,但是後端介面又超時了。太久了,使用者體驗肯定不好。簡直可以說是沒辦法繼續使用了。2.已經可以查到好多人寫好的。但是直接拿來複用,總有這樣那樣的問題。3.我用
vue 通過自定義指令實現 置頂操作;
body template binding info tel timer 實現 當前 png 項目需求:要求當前項目每個頁面滑到超出一屏的距離時,出現 backTop 按鈕,點擊則回到最頂端;俗稱置頂操作: 因為涉及到的頁面較多,每個頁面都加肯定顯得重復累贅,最終想到了 V
vue(2) - 自定義指令
asc color true dom this == ont ron 指令 我們都知道v-for、v-html、等等都是指令:擴展html 語法 自定義指令: 屬性指令 Vue.deirctive(指令名稱,function(){ this.el ==>原生的do
vue+element-自定義指令,防止重複提交
全域性directive的寫法 // 提交以後禁用按鈕一段時間,防止重複提交 import Vue from 'vue'; Vue.directive('noMoreClick', { inserted(el, binding) { el.addEventListener('clic
Vue過濾器,自定義指令,ES6字串操作
陣列的方法 以下方法都會對陣列中的每一項進行遍歷, 並執行相關的操作; forEach: 無法被終止 some: 可以通過return true終止 filter: 可以過濾 findIndex: 可以找到相應物件的索引 刪除/增加index個後的陣列元
Vue入門-自定義指令
自定義指令當需要對普通DOM元素進行底層操作時,可以考慮自定義指令來實現。語法: Vue.directive(指令名,配置物件)。1.建立全域性指令 特點:可以在任意不同的例項物件掛載的範圍進行使用 Vue.directive('highlight', {
Vue之自定義指令
使用Vue.directive(); 1.直接自定義名稱 :red <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <titl
自定義view—Canvas實現手寫板和塗鴉功能
學習導航 上週發表的兩篇關於塗鴉和環形進度條的文章莫名的就沒有了,這很鬱悶。FK!本少爺張那麼帥,為何會發生如此荒唐的事情,真是豈有此理!這裡直接上程式碼,裡面有詳細講解,不懂得請給我留言。 預覽圖 程式碼 一
vue全域性自定義指令和區域性自定義指令
除了預設設定的核心指令 (v-model 和 v-show),Vue 也允許註冊自定義指令。 區域性自定義指令(只針對元件內的元素) 父元件app.vue <template> <div id="app">
vue.js自定義指令及鉤子函式學習
過濾器 概念:Vue.js允許自定義過濾器,可被用作一些常見的文字格式化,過濾器 可以用在兩個地方:mustache插值和v-bind表示式。過濾器應該被新增在JavaScript表示式的尾部,由管道符指示 過濾器呼叫時候的格式 { { name | nam
Vue的自定義指令
lan app int 參數 main pre direct -c vue 在main.js中使用Vue.directive({‘directiveName‘,bind(el,binding,vnode)}); 註:Vue.directive要寫在new Vue之前 參
Vue 3自定義指令開發
本文由葡萄城技術團隊原創並首發 轉載請註明出處:葡萄城官網,葡萄城為開發者提供專業的開發工具、解決方案和服務,賦能開發者。 什麼是指令(directive) 在Angular和Vue中都有Directive的概念,我們通常講Directive 翻譯為“指令”。 在計算
Vue + Canvas 實現頭像截圖上傳功能(一)
此文共分為兩篇,上篇主要是展示最終的效果,下篇為程式碼實現部分。 首先,上圖看最終的製作效果。 這是選擇圖片前: 這是選擇圖片後: 主要需求有這幾點:
自定義使用者和認證 中介軟體 檔案上傳/oss 圖片驗證碼
自定義使用者 寫一個繼承自AbstractUser的類,然後追加自己需要的欄位 在settings.py加入AUTH_USER_MODEL = 'app的名字.使用者類' 自定義使用者認證 步驟 在app的目錄下新鍵一個檔案 auth.py 寫一個繼承自ModeBacke
上傳頭像自定義裁切, JCROP 選區,AJAX 上傳,PHP GD庫裁切
AJAX 上傳圖片後,使用JCrop 外掛作為前端選區工具,實時預覽效果, 使用者上傳的頭像圖片尺寸過大時,程式會自動縮放到合理範圍,防止頁面被撐破。 沒有使用常見的 flash 方式,可以放心在 蘋果的 Mac Safari 上使用。 最終效果: 程式分析: 前端: