整合營銷服務商

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

          免費咨詢熱線:

          可視化的 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();
           })
          

          主站蜘蛛池模板: 无码精品黑人一区二区三区| 日韩一区二区三区不卡视频| 国产一区二区电影| 久久精品一区二区| 日韩精品无码一区二区中文字幕 | 亚洲AV无码片一区二区三区| 国产精品久久一区二区三区| 精品无码综合一区二区三区| 国产成人久久一区二区不卡三区| 精品无码中出一区二区| 波多野结衣免费一区视频| 色妞色视频一区二区三区四区| 国产免费一区二区三区| 午夜精品一区二区三区在线观看| 久久久久一区二区三区| 无码国产精品久久一区免费| 国产成人无码精品一区在线观看| 人妻体体内射精一区二区| 国产精品久久无码一区二区三区网| 国产成人片视频一区二区| 精品国产a∨无码一区二区三区| 视频在线观看一区| 国产对白精品刺激一区二区| 久久se精品一区二区影院| 男女久久久国产一区二区三区| 国产成人一区二区三区电影网站| 久草新视频一区二区三区| 怡红院一区二区三区| 无码人妻精品一区二区三区久久| 国产在线无码视频一区| 亚洲一区精品视频在线| 久久精品国产一区二区三区| 亚洲一区AV无码少妇电影| 国产无套精品一区二区| 精品一区二区久久久久久久网精| 无码国产伦一区二区三区视频 | 国产suv精品一区二区6| 久久久无码精品国产一区| 亚洲国产成人久久综合一区77| 亚洲熟女综合一区二区三区| 日本不卡一区二区视频a|