网站首页 think技术
蛋碎的多图片显示排序
发布时间:2016-06-11 02:52查看次数:4140
蛋碎的多图上传 + 拖动排序!!!
这里边有个坑就是filereader 的方法都是异步执行的,就是多线程
如果放在 FOR里边 永远输出的 是最后一个程序 !!这个坑我也是踩了好深
然后今天翻然醒悟 示例代码如下:
对你有帮助记得点赞哦!
日了狗了 屏幕分辨率小 真蛋碎
首先蛋碎的原因是 var file_data = new FileReader();
file_data.readAsDataURL(files[i]); // 主要是蛋碎这个onload事件 这个时间不能传参 file_data.onload = function(e){ test(this.result); };
想了好多方法 ...什么闭包了..什么绑定方法了..什么什么.......但效果不好!!
这个拖动排序好弄,直接用JQUERY.UI插件 即可实现拖动,排列了什么的
那算了.用ajax无刷新上传 然后再拖动排序 !
因为用了 readAsDataURL 把图片数据直接读取成 base64_decode 然后直接AJAXPOST数据
$.post('1.php',{'img':imgdate},function(date){ if (date.msg == 1) { } } ,'json'); }
img':imgdate 这里的数据是 base64_encode的,没有折腾过!以为直接base64_decode在 file_put_contents;
就可以了~~谁知道呢!问题有来了
写出后带有base64的文件头,图片格式不对了~~~~
问题有来了 !!郁闷死我了!!! 最后咋弄?百度 后知道是这个文件头作怪 这个头部长度是根据图片类型的 所以呢?长度不是固定的
好吧!正则匹配来了!!
function set_img($img_content){ if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $img_content, $result)){ $type = $result[2]; $new_file = "./images/test.{$type}"; if (file_put_contents($new_file, base64_decode(str_replace($result[1], '', $img_content)))){ //这里返回JSON对象数据是因为前台还要移动排序 $msg = array( 'msg'=>'1', 'imgname'=>'test.'.$type, 'url'=>$new_file ); echo json_encode($msg); } } }
然后就这样吧!!! 效果是 多图片上传->上传后返回客户端图片路径->然后浏览器拖动图片->进行排序AJAX排序!
技术点:
1.<input type="file" name="file_upload" id="file_upload_1" multiple="multiple" />
2.JQUERY的 .prop('files');
3.H5 new FileReader()
4.base64_decode base64_encode
真是折腾的一个需求---从用户体验上说 不错.是我自己的 JS水准不够加油!
关键字词:蛋碎的多图片显示排序