Maison > Article > interface Web > Implémentez une série de fonctions telles que l'aperçu local, le recadrage, la compression et le téléchargement d'images dans vue.js
Cet article présente principalement vue.js pour implémenter la fonction locale de prévisualisation, de recadrage, de compression et de téléchargement des images. Le code est simple et facile à comprendre, très bon et a une valeur de référence. Les amis dans le besoin peuvent s'y référer. 🎜>
Le code suivant implique la syntaxe Vue 2.0 et ES6.<p id="wrap"> <label> 点我上传图片 <input type='file' @change="change" ref="input"> </label> <img :src="src" ref="img"> </p> new Vue({ el: '#wrap', data: { // 一张透明的图片 src:'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7', elInput: null }, methods: { change(e){ // ... } } })
function getSize(e){ return e.target.files[0].size; }Mais il n'y a pas de solution JS pure trouvé sous ie9. Par conséquent, lorsque vous devez juger de la taille, vous pouvez directement contourner IE9 et ne pas le juger
const refs = this.$refs const elInput = refs.input const elImg = refs.imgDans les navigateurs modernes, vous pouvez lire les images locales en appelant FileReader et convertir l'adresse de l'image au format Base64 pour en prévisualiser.
function getSrc(){ const reader = new FileReader(); reader.onload = (e) => { const src = e.target.result; elImg.src = src; }; if (elInput.files && elInput.files[0]) { reader.readAsDataURL(elInput.files[0]); } }Mais le problème revient, ie9 ne prend pas en charge FileReader, mais il peut être affiché via les filtres ie.
function getSrc(){ elInput.select(); elInput.blur(); const src = document.selection.createRange().text; document.selection.empty(); elImg.style.filter = `progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale',src='${src}')`; }Le
dans le filtre est écrit afin que l'image puisse s'adapter à la mise à l'échelle du contenu. sizingMethod='scale'
, il doit donc être dans document.selection.createRange()
Ajoutez simplement elInput.select()
après. elInput.blur()
est défini par défaut pour input[type=file]
, ce qui provoquera une erreur sous IE9. Cela devrait être considéré par le navigateur comme une tromperie pour les utilisateurs qui cliquent, ils doivent donc parcourir des courbes pour sauver le pays. visible:hidden
label{ overflow:hidden; } label input[type='file']{ position:absolute; top:9999px; left:9999px; }
Solution ie9
Le paramètre src accepte le chemin de l'image localelet tempEl; const getSizeIncompatible = (src, callback) => { if (!tempEl) { tempEl = document.createElement('p'); tempEl.style.position = 'absolute'; tempEl.style.width = '1px'; tempEl.style.height = '1px'; tempEl.style.left = '-9999px'; tempEl.style.top = '-9999px'; tempEl.style.filter = 'progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=image)'; document.body.insertBefore(tempEl, document.body.firstChild); } tempEl.filters.item('DXImageTransform.Microsoft.AlphaImageLoader').src = src; callback(tempEl.offsetWidth, tempEl.offsetHeight); };Parmi eux,
consiste à afficher la taille originale de l'image. sizingMethod='image'
Solution non-ie9
Le paramètre src accepte le chemin de l'image encodé en base64const getSize = (src, callback) => { const image = new Image(); image.onload = () => { callback(image.width, image.height); }; image.src = src; };
Ce qui précède est ce que j'ai compilé pour vous. J'espère que cela vous sera utile à l'avenir. Articles associés :
Résoudre le problème que la page ne s'affiche pas lorsque Vue modifie le tableau via le tableau suivant
vue2.0 axios Solution au problème du rendu inter-domaines
Solution au problème de superposition d'options de select dans layui
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!