TP5框架实现一次选择多张图片并预览的方法示例


Posted in PHP onApril 04, 2020

本文实例讲述了TP5框架实现一次选择多张图片并预览的方法。分享给大家供大家参考,具体如下:

点击选择图片(可选多张),确定后将选择的图片显示在页面上,已经选择的图片也可以删除,点击提交将图片提交给后台。

1、效果图

TP5框架实现一次选择多张图片并预览的方法示例

2、code

用input标签并选择type=file,记得带上multiple,不然就只能单选图片了

如果不想通过 ajax 提交,一定要加上文件传输协议 ( enctype="multipart/form-data" )

view

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>showImages</title>
  <style type="text/css">
    .float{
      float:left;
      width : 200px;
      height: 200px;
      overflow: hidden;
      border: 1px solid #CCCCCC;
      border-radius: 10px;
      padding: 5px;
      margin: 5px;
    }
    img{
      position: relative;
    }
    .result{
      width: 200px;
      height: 200px;
      text-align: center;
      box-sizing: border-box;
    }
    #file_input{
      display: none;
    }
    .delete{
      width: 200px;
      height:200px;
      position: absolute;
      text-align: center;
      line-height: 200px;
      z-index: 10;
      font-size: 30px;
      background-color: rgba(255,255,255,0.8);
      color: #777;
      opacity: 0;
      transition-duration: :0.7s;
      -webkit-transition-duration: 0.7s;
    }
    .delete:hover{
      cursor: pointer;
      opacity: 1;
    }
  </style>
  <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
  <script type="text/javascript">
    window.onload = function(){
      var input = document.getElementById("file_input");
      var result;
      var dataArr = []; // 储存所选图片的结果(文件名和base64数据)
      var fd; //FormData方式发送请求
      var oSelect = document.getElementById("select");
      var oAdd = document.getElementById("add");
      var oSubmit = document.getElementById("submit");
      var oInput = document.getElementById("file_input");

      if(typeof FileReader==='undefined'){
        alert("抱歉,你的浏览器不支持 FileReader");
        input.setAttribute('disabled','disabled');
      }else{
        input.addEventListener('change',readFile,false);
      } //handler

      function readFile(){
        fd = new FormData();
        var iLen = this.files.length;
        var index = 0;
        for(var i=0;i<iLen;i++){
          if (!input['value'].match(/.jpg|.gif|.png|.jpeg|.bmp/i)){//判断上传文件格式
            return alert("上传的图片格式不正确,请重新选择");
          }
          var reader = new FileReader();
          reader.index = i;
          fd.append(i,this.files[i]);
          reader.readAsDataURL(this.files[i]); //转成base64
          reader.fileName = this.files[i].name;

          reader.onload = function(e){
            var imgMsg = {
              name : this.fileName,//获取文件名
              base64 : this.result  //reader.readAsDataURL方法执行完后,base64数据储存在reader.result里
            }
            dataArr.push(imgMsg);
            result = '<div class="delete">delete</div><div class="result"><img src="'+this.result+'" alt=""/></div>';
            var div = document.createElement('div');
            div.innerHTML = result;
            div['className'] = 'float';
            div['index'] = index;
            document.getElementsByTagName('body')[0].appendChild(div); //插入dom树
            var img = div.getElementsByTagName('img')[0];
            img.onload = function(){
              var nowHeight = ReSizePic(this); //设置图片大小
              this.parentNode.style.display = 'block';
              var oParent = this.parentNode;
              if(nowHeight){
                oParent.style.paddingTop = (oParent.offsetHeight - nowHeight)/2 + 'px';
              }
            }

            div.onclick = function(){
              this.remove();         // 在页面中删除该图片元素
              delete dataArr[this.index]; // 删除dataArr对应的数据

            }
            index++;
          }
        }
      }

      function send(){
        var submitArr = [];
        for (var i = 0; i < dataArr.length; i++) {
          if (dataArr[i]) {
            submitArr.push(dataArr[i]);
          }
        }
        // console.log('提交的数据:'+JSON.stringify(submitArr))
        $.ajax({
          url : 'http://39.106.182.218',
          type : 'post',
          data : JSON.stringify(submitArr),
          dataType: 'json',
          //processData: false,  用FormData传fd时需有这两项
          //contentType: false,
          success : function(data){
            console.log('返回的数据:'+JSON.stringify(data))
          }

        })
      }

      oSelect.οnclick=function(){
        oInput.value = "";  // 先将oInput值清空,否则选择图片与上次相同时change事件不会触发
        //清空已选图片
        $('.float').remove();
        dataArr = [];
        index = 0;
        oInput.click();
      }

      oAdd.οnclick=function(){
        oInput.value = "";  // 先将oInput值清空,否则选择图片与上次相同时change事件不会触发
        oInput.click();
      }

      oSubmit.οnclick=function(){
        if(!dataArr.length){
          return alert('请先选择文件');
        }
        send();
      }
    }
    /*
     用ajax发送fd参数时要告诉jQuery不要去处理发送的数据,
     不要去设置Content-Type请求头才可以发送成功,否则会报“Illegal invocation”的错误,
     也就是非法调用,所以要加上“processData: false,contentType: false,”
     * */

    function ReSizePic(ThisPic) {
      var RePicWidth = 200; //这里修改为您想显示的宽度值

      var TrueWidth = ThisPic.width; //图片实际宽度
      var TrueHeight = ThisPic.height; //图片实际高度

      if(TrueWidth>TrueHeight){
        //宽大于高
        var reWidth = RePicWidth;
        ThisPic.width = reWidth;
        //垂直居中
        var nowHeight = TrueHeight * (reWidth/TrueWidth);
        return nowHeight; //将图片修改后的高度返回,供垂直居中用
      }else{
        //宽小于高
        var reHeight = RePicWidth;
        ThisPic.height = reHeight;
      }
    }
  </script>
</head>
<body>
<div class="container">
  <label>请选择一个图像文件:</label>
  <button id="select">(重新)选择图片</button>
  <button id="add">(追加)图片</button>

<form action="" method="post" enctype="multipart/form-data">
  <input type="file" id="file_input" name="image[]" multiple/>
  <!--用input标签并选择type=file,记得带上multiple,不然就只能单选图片了-->
  <button id="submit">提交</button>
</form>

</div>
</body>
</html>

controller

$image=request()->file('image');
print_r($image);

3、over!!!

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

PHP 相关文章推荐
php adodb介绍
Mar 19 PHP
redis 队列操作的例子(php)
Apr 12 PHP
php启动时候提示PHP startup的解决方法
May 07 PHP
php stripslashes和addslashes的区别
Feb 03 PHP
PHP中redis的用法深入解析
Feb 20 PHP
如何阻止网站被恶意反向代理访问(防网站镜像)
Mar 18 PHP
php数组合并的二种方法
Mar 21 PHP
php实现的短网址算法分享
Jun 20 PHP
php 无限级分类,超级简单的无限级分类,支持输出树状图
Jun 29 PHP
ThinkPHP有变量的where条件分页实例
Nov 03 PHP
腾讯微博提示missing parameter errorcode 102 错误的解决方法
Dec 22 PHP
PHP使用PDO 连接与连接管理操作实例分析
Apr 21 PHP
thinkphp框架实现路由重定义简化url访问地址的方法分析
Apr 04 #PHP
Thinkphp框架使用list_to_tree 实现无限级分类列出所有节点示例
Apr 04 #PHP
thinkphp框架表单数组实现图片批量上传功能示例
Apr 04 #PHP
yii框架结合charjs统计上一年与当前年数据的方法示例
Apr 04 #PHP
yii框架结合charjs实现统计30天数据的方法
Apr 04 #PHP
yii 框架实现按天,月,年,自定义时间段统计数据的方法分析
Apr 04 #PHP
thinkphp5 框架结合plupload实现图片批量上传功能示例
Apr 04 #PHP
You might like
mysql总结之explain
2012/02/27 PHP
Zend Framework数据库操作方法实例总结
2016/12/11 PHP
使用laravel和ECharts实现折线图效果的例子
2019/10/09 PHP
JS小游戏之极速快跑源码详解
2014/09/25 Javascript
JavaScript中自定义事件用法分析
2014/12/23 Javascript
基于JS实现textarea中获取动态剩余字数的方法
2016/05/25 Javascript
浅谈js继承的实现及公有、私有、静态方法的书写
2016/10/28 Javascript
AngularJS实现页面跳转后自动弹出对话框实例代码
2017/08/02 Javascript
vue.js使用3DES加密的方法示例
2018/05/18 Javascript
JS实现自定义弹窗功能
2018/08/08 Javascript
JavaScript循环遍历你会用哪些之小结篇
2018/09/28 Javascript
angular2 组件之间通过service互相传递的实例
2018/09/30 Javascript
iView框架问题整理小结
2018/10/16 Javascript
详解react阻止无效重渲染的多种方式
2018/12/11 Javascript
vue中eslintrc.js配置最详细介绍
2018/12/21 Javascript
浅谈Javascript中的对象和继承
2019/04/19 Javascript
解决vue的过渡动画无法正常实现问题
2019/10/31 Javascript
Python设计模式之单例模式实例
2014/04/26 Python
Python基于whois模块简单识别网站域名及所有者的方法
2018/04/23 Python
Python修改文件往指定行插入内容的实例
2019/01/30 Python
python 两个一样的字符串用==结果为false问题的解决
2020/03/12 Python
Canvas globalCompositeOperation
2018/12/18 HTML / CSS
Steve Madden官网:美国鞋类品牌
2017/01/29 全球购物
如何写出高性能的JSP和Servlet
2013/01/22 面试题
介绍一下gcc特性
2012/01/20 面试题
办公室助理岗位职责
2013/12/25 职场文书
《盲人摸象》教学反思
2014/02/16 职场文书
安全教育实施方案
2014/03/02 职场文书
消防志愿者活动方案
2014/08/23 职场文书
大学生学习计划书
2014/09/15 职场文书
县委常委班子对照检查材料思想汇报
2014/09/28 职场文书
2015年超市员工工作总结
2015/05/04 职场文书
2015年妇委会工作总结
2015/05/22 职场文书
看雷锋电影观后感
2015/06/10 职场文书
Python使用华为API为图像设置多个锚点标签
2022/04/12 Python
js前端设计模式优化50%表单校验代码示例
2022/06/21 Javascript