整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          可視化的 JS:動態圖演示 - 事件循環 Event Loop的過程


          文地址:https://dev.to/lydiahallie/javascript-visualized-event-loop-3dif

          原文作者:Lydia Hallie

          譯者:夜盡天明

          轉發鏈接:https://mp.weixin.qq.com/s/uPgvp1wULIck2yKAqNLeLQ

          HTML基本結構:
          <form class="layui-form" action="" id="feedBackForm">
           <div class="layui-form-item">
           <!--表單內容-->
           </div>
           <!--圖片上傳-->
           <div class="layui-upload feedback-padding">
           <button type="button" class="layui-btn" id="selectImg">選擇圖片</button>
           <input type="text" class="layui-hide" name="">
           <blockquote class="layui-elem-quote layui-quote-nm" style="margin-top: 10px;">
           預覽圖:
           <div id="previewImg" class="layui-clear feedback-overflow">
           </div>
           </blockquote>
           </div>
           <div class="layui-form-item">
           <div class="feedback-block">
           <button id="submitBtn" class="layui-btn" lay-submit="" lay-filter="demo1">立即提交</button>
           </div>
           </div>
           </form>
          
          JavaScript基本內容:
          1、多圖片上傳、預覽
           //多圖片上傳
           uploadList = upload.render({
           elem: '#selectImg'
           ,url: "/add.do"
           ,accept: 'images'
           ,acceptMime: 'image/*'
           ,method: 'post'
           ,multiple: true
           ,auto: false
           ,choose: function(obj){
           files = obj.pushFile(); //將每次選擇的文件追加到文件隊列
           //圖像預覽,如果是多文件,會逐個添加。(不支持ie8/9)
           obj.preview(function(index, file, result){
           var imgBox = document.createElement("div");//預覽圖、刪除預覽圖按鈕容器
           var imgDelete = document.createElement("div");//刪除預覽圖按鈕
           var imgobj = new Image(); //創建新img對象
           imgBox.style.float = 'left';
           imgBox.style.position = 'relative';
           imgDelete.setAttribute('class',"feedback-delete-btn layui-icon layui-icon-close-fill");
           imgDelete.setAttribute ('title','刪除');
           imgobj.src = result; //指定數據源
           imgobj['layer-src'] = result;
           imgobj.alt = file.name;
           imgobj.className = 'layui-upload-img';
           imgobj['layer-index'] = index;
           imgBox.appendChild(imgobj);
           imgBox.appendChild(imgDelete);
           imgDelete.onclick = function () { // 為預覽圖的刪除按鈕綁定刪除事件
           delete files[index]; //刪除對應的文件
           document.getElementById("previewImg").removeChild(imgBox);//從預覽區域移除
           uploadList.config.elem.next()[0].value = ''; //清空 input file 值,以免刪除后出現同名文件不可選
           }
           document.getElementById("previewImg").appendChild(imgBox); //添加到預覽區域
           //photos 圖片層
           layer.photos({//此處目前存在bug 導致單擊后無法在彈層中打開預覽 下面會講解如何處理
           photos: '#previewImg'
           ,anim: 0
           });
           });
           }
           });
          
          2、提交
           //監聽提交
           form.on('submit(demo1)', function(data){
           var myForm = document.getElementById("feedBackForm");
           var formData = new FormData(myForm);
           //循環 files(第一步choose回調中儲存的對象) 逐條插入到formData
           for (var i in files) {
           formData.append("files",files[i]);//此處的files為上傳接口參數名
           }
           $.ajax({
           url: "/add.do",
           type: "POST",
           data: formData,
           async: false,
           contentType: false,
           processData: false,
           error: function () {
           layer.msg('網絡超時',{icon:2});
           },
           success: function (data) {
           layer.msg('成功',{icon:1});
           }
           })
           return false;
           });
          
          3、步驟一中 layer.photos 重復調用,導致彈層預覽圖無法正常顯示處理:
          修改layer.js源碼 ,點擊事件綁定之前,先用off()進行解綁,避免重復綁定,如下:
           loop || parent.off('click').on('click', options.img, function(){
           var othis = $(this), index = othis.attr('layer-index');
           layer.photos($.extend(options, {
           photos: {
           start: index,
           data: data,
           tab: options.tab
           },
           full: options.full
           }), true);
           pushData();
           })
          

          主站蜘蛛池模板: 国产激情з∠视频一区二区| 国产大秀视频在线一区二区| 国产精品视频一区二区噜噜| 国产精品视频第一区二区三区| 性无码免费一区二区三区在线| 日本免费一区二区三区四区五六区| 亚洲色偷精品一区二区三区| 亚洲欧美国产国产综合一区| 成人精品一区二区电影 | 亚洲一区二区高清| 国产一区二区三区国产精品| 日韩三级一区二区| 亚洲一区日韩高清中文字幕亚洲 | 激情内射日本一区二区三区| 中文字幕一区二区三区四区 | 一区二区三区人妻无码| 亚洲夜夜欢A∨一区二区三区| 91久久精一区二区三区大全| 无码免费一区二区三区免费播放| 精品不卡一区二区| 竹菊影视欧美日韩一区二区三区四区五区 | 亚洲影视一区二区| 蜜芽亚洲av无码一区二区三区| 国产视频一区二区在线观看| 福利视频一区二区牛牛| 精品日产一区二区三区手机| 精品国产AV无码一区二区三区| 久久国产一区二区| 无码少妇一区二区浪潮av| 99精品国产高清一区二区| 久久se精品一区精品二区国产 | 国产一区二区三区手机在线观看| 痴汉中文字幕视频一区| 国产高清一区二区三区四区| 亚洲一区二区三区久久久久| 中文无码AV一区二区三区 | 日韩伦理一区二区| 日韩内射美女人妻一区二区三区| 正在播放国产一区| 亚洲A∨无码一区二区三区| 熟妇人妻AV无码一区二区三区|