React-图片输入框-移动端网页_018

React-图片输入框-移动端网页

  • gitHub地址 觉得有参考价值,点个赞
https://github.com/xiaopingzh...

目录结构

.
├── README.md
├── dist
│   ├── bundle.js
│   └── index.html
├── package.json
├── src
│   ├── components
│   │   ├── ErrorPage
│   │   │   ├── ErrorPage.css
│   │   │   └── ErrorPage.js
│   │   ├── Notice
│   │   │   ├── Notice.css
│   │   │   └── Notice.js
│   │   ├── PersonalUploadFileForm
│   │   │   ├── PersonalUploadFileForm.css
│   │   │   └── PersonalUploadFileForm.js
│   │   ├── SuccessPage
│   │   │   ├── SuccessPage.css
│   │   │   └── SuccessPage.js
│   │   └── common
│   │       ├── actions.js
│   │       ├── getUrlpargm.js
│   │       └── utils.js
│   ├── index.html
│   ├── index.js
│   └── page
│       ├── UploadForm.js
│       └── upLoadForm.css
├── webpack.config.js
└── webpack.production.config.js

上传组件代码

基于原生的API接口,点击输入输入框 手机上会出现 文件 相机选项
可自行选择拍照上传,
为解决微信内置上传的bug 其中accept 设置为 accept="image/*"

loading组件找了一个简单的动效

npm config set '@bit:registry' https://node.bit.dev
npm i @bit/davidhu2000.react-spinners.pulse-loader

来源

https://bit.dev/davidhu2000/r...
import React from 'react';
import './PersonalUploadFileForm.css';
import toast from '../Notice/Notice';
import PulseLoader from '@bit/davidhu2000.react-spinners.pulse-loader';
class PersonalUploadFileForm extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      filePreviewUrl: this.props.value ? this.props.value.base64 : '',
      overSizeModel: false,
    };
  }

  selectFile = e => {
    e.preventDefault();
    this.refs.fileinput.click();
  };

  _handleFileChange = e => {
    e.preventDefault();

    let reader = new FileReader();
    let file = e.target.files[0];

    reader.onloadend = () => {
      if (file.type != 'image/jpeg' && file.type != 'image/png') {
        toast('请选择图片',"error");
        return false;
      }
      if (file.size > 8000000){
        toast('图片太大,请重新选择',"error");
        return false;
      }
      this.setState({
        filePreviewUrl: reader.result,
      });
      this.props.onChange({ name: file.name, base64: reader.result });
    };

    reader.readAsDataURL(file);
    e.target.value = null;
  };

  render() {
    let { filePreviewUrl } = this.state;
    let { backimg, textTip, displaybackimg, uploading } = this.props;
    return (
      
{uploading ? (
) : ( )}
{textTip && {textTip}}
); } } export default PersonalUploadFileForm;
  • 初试界面

React-图片输入框-移动端网页_018_第1张图片

— 选择图片

React-图片输入框-移动端网页_018_第2张图片

-上传失败提示

React-图片输入框-移动端网页_018_第3张图片

  • 上传中

React-图片输入框-移动端网页_018_第4张图片

  • 上传成功

React-图片输入框-移动端网页_018_第5张图片

  • 微信内置浏览器打开

React-图片输入框-移动端网页_018_第6张图片

你可能感兴趣的:(移动端web,html5,input标签,react.js)