1. 程式人生 > >Vue directive自定義指令+canvas實現H5圖片壓縮上傳-Base64格式

Vue directive自定義指令+canvas實現H5圖片壓縮上傳-Base64格式

  1. 前言
    最近優化專案-手機拍照圖片太大,回顯速度比較慢,使用了vue的自定義指令實現H5壓縮上傳base64格式的圖片

  2. 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); } }); } });
  1. HTML
<div id="_upload">
    <i v-on:click="upload">自定義上傳檔案樣式</i>
    <input id="_file" v-canvas="success" style="display: none;"/>
</div>
  1. 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 上使用。 最終效果: 程式分析: 前端: