美文网首页
JavaScript的一些思考,图片的前端预览

JavaScript的一些思考,图片的前端预览

作者: 剑来___ | 来源:发表于2017-11-13 00:20 被阅读14次

最近遇到了一点感情问题,一个月没有更博了,么得办法,那段时间突然就没了人生目标和方向。浑浑噩噩的确挺恐怖的.......
好吧,在写react的时候要实现一个功能,就是在在一个type为file的Input标签中,选择一个图片,然后在dom上显示这张图片。想过两个方案。

  1. 添加一个上传按钮,异步提交到服务器,然后后端返回一个cdn地址,在img的src属性上显示这个路径,因为是react,所以讲这个src属性加入到state就可以实现实时刷新。但是因为在这个in普通标签之前还有许多表单,单独上传图片后会导致这个表单刷新,前面填写的信息就 白写了,影响用户体验。虽然网上说配合fromData就可以异步上传,但是react中还是会刷新整个页面。
  2. 在这个input标签的onchange属性中直接拿到file的url显示在img的src上

方案2的实现

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
    <meta http-equiv="X-UA-Compatible" content="IE=EDGE" />
    <title>Web Cache</title>
    <script>
      function onImngChange(event) {
        console.log(event);
        const windowUrl = window.URL
        const fileObj = event.currentTarget.files[0]
        if(fileObj) {
          const dataUrl = windowUrl.createObjectURL(fileObj)
          const imgObj = document.getElementById('preview')
          imgObj.src = dataUrl
        }
      }
    </script>
  </head>
  <body>
    <input type="file" id="noImg" onchange="onImngChange(event)" />
    <img id="preview"  alt="..." />
  </body>
</html>
屏幕快照 2017-11-13 上午12.17.34.png

这里的主要实现在onchange方法中,就是调用的onI'mgChange中。

event.currentTarget

首先先看一下官方对这个对象的定义

currentTarget 事件属性返回其监听器触发事件的节点,即当前处理该事件的元素、文档或窗口。
在捕获和起泡阶段,该属性是非常有用的,因为在这两个节点,它不同于 target 属性。
就是说拿到触发这个onchange="onImngChange(event)"的对象,就是<input>,这里的target和currentTarget是一样的,但是有些地方,这两个对象可能不一样,要搞清楚他们的区别挺烦的,但是只要明白他们分别对应的是什么就很简单了

  • e.target 指向触发事件监听的对象。
  • e.currentTarget 指向添加监听事件的对象。
    在currentTarget对象中我们可以获取到file属性,file[0]就是我们要找的那个文件

window.URL.createObjectURL()

Window.URL 属性返回一个对象,它提供了用于创建和管理对象URLs的静态方法。它也可以作为一个构造函数被调用来构造 URL 对象。
创建一个url来表示file对象和blob对象

总结

首先得拿到file的对象,这里可以根据target对象拿,也可以直接getElementById().file去拿,然后将这个对象url化,用window.URL的createObjectURL方法。
具体请参考这篇[图片上传中...(屏幕快照 2017-11-13 上午12.17.34.png-428fe6-1510503520907-0)]

相关文章

网友评论

      本文标题:JavaScript的一些思考,图片的前端预览

      本文链接:https://www.haomeiwen.com/subject/ebcamxtx.html