Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 中文字幕在线播放一区,国产三级黄色录像,亚洲情侣在线

          整合營銷服務商

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

          免費咨詢熱線:

          上傳圖片到阿里云OSS

          上傳圖片到阿里云OSS

          傳、預覽、下載圖片是app常用的功能之一,一般的做法是建立一個圖片存儲服務器,再開發一個接收前端上傳文件的后端服務,接收到前端上傳的圖片文件,然后再調用存儲服務器的接口完成圖片文件的存儲。

          現在阿里云提供了對象存儲云服務(OSS),非常方便APP直接將圖片等文件上傳上去,并提供了多種瀏覽、下載的方式,不僅操作簡單、而且效率高、速度快,本文介紹三種使用方式,希望能夠讓工程師少走彎路。

          傳統模式

          這種方式只是把OSS作為文件存儲體替代了自建存儲器,上傳邏輯和路徑還是和傳統的方式一致,后端服務給前端提供上傳接口,在收到前端上傳的文件后,再調用阿里云的OSS SDK的API將文件上傳到阿里云的OSS存儲桶中。

          上傳流程

          詳細說明及相關代碼請參考《云平臺對象存儲OSS》

          直接表單方式

          這種方式更加的便捷、快速,無需開發接收后端服務,而是前端直接將文件上傳到OSS,這種方式就要求前端按照約定的參數訪問OSS API,為了安全起見要按照阿里云SDK的方式生成相應的簽名并提供給前端。

          FORM表單直接上傳流程

          這里要求提前生成簽名串,生成算法如下:

          package aliyun;
          
          import aliyun.pojo.ResultData;
          import aliyun.pojo.SignatureData;
          import com.alibaba.fastjson.JSONObject;
          import org.apache.commons.codec.binary.Base64;
          
          public class Controller {
              private final static String POLICY="{\"expiration\":\"2025-12-31T23:59:59Z\",\"conditions\":[[\"content-length-range\",0,104857600]]}";
              private String accessKeySecret=System.getenv("ACCESS_SECRET_CODE");
          
              public String signatureCode(int times) throws Exception {
                  ResultData resultData=new ResultData();
          
                  //約束規則
                  String encodePolicy=new String(Base64.encodeBase64(POLICY.getBytes()));
                  // 生成簽名。
                  String signatureCom=com.aliyun.oss.common.auth.ServiceSignature.create().computeSignature(accessKeySecret, encodePolicy);
          
                  SignatureData signatureData=new SignatureData(encodePolicy,signatureCom);
                  resultData.setData(signatureData);
          
                  return JSONObject.toJSONString(resultData);
              }
          }

          其中:POLICY定義了上傳有效時間和文件大小約束,簽名要用到阿里云賬號的Access Key Secret。這里的簽名是有時效性的,有效期內不會改變,如果對安全要求很高,可以將該簽名過程作為服務發布,讓前端每次在上傳的時候調用服務獲取實時的簽名數據。

          前端form表單的構成如下:

          <div id="upload">
              <form  action="http://mybucket.oss-cn-beijing.aliyuncs.com" method="post" enctype="multipart/form-data">
                  <p>阿里云AccessKeyID:<input type="text" name="OSSAccessKeyId" value="LTAI8N5***XX8cr"></p>
                  <p>約束規則base64:<input type="text" name="policy" value='eyJleHBpcmF0aW9uI*********zMVQyMzo1OTo1OVoiLCJjb25kaXRpb25zIjpbWyJjb250ZW50LWxlbmd0aC1yYW5nZSIsMCwxMDQ4NTc2MDBdXX0='></p>
                  <p>約束規則簽名:<input type="text" name="Signature" value="pgxE8VnN8kSJEWz*****QV7uBE="></p>
                  <p>OSS存儲文件名:<input type="text" name="key" value="upload/lee.jpg"></p>
                  <p>選擇上傳文件:<input name="file" type="file" id="file"></p>
                  <input name="submit" value="上傳" type="submit">
              </form>
          </div>

          其中:action是你賬號下OSS存儲桶的endpoint URL,OSSAccessKeyId是你賬號下的AccessKey ID,policy是對上傳規則約束的base64編碼(這里千萬不能直接使用你定義的policy字符串,而是該字符串的字節碼的base64編碼后的結果,即由上面的計算結果提供),Signature就是對policy的簽名結果,key是存儲到你指定bucket的目錄和文件名。

          ajax方式

          通過這種方式可以不刷新頁面完成文件直接上傳到OSS,建議采用plupload.js插件實現。

          <!DOCTYPE html>
          <html>
          <head>
          	<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
          	<title>OSS web直傳</title>
          	<link rel="stylesheet" type="text/css" href="style.css"/>
          	<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
          </head>
          <body>
          
          <h2>OSS web直傳---直接在JS簽名</h2>
          <ol>
          <li>基于plupload封裝 </li>
          <li>支持html5,flash,silverlight,html4 等協議上傳</li>
          <li>可以運行在PC瀏覽器,手機瀏覽器,微信</li>
          <li>可以選擇多文件上傳</li>
          <li>顯示上傳進度條</li>
          <li>可以控制上傳文件的大小</li>
          <li>最關鍵的是,讓你10分鐘之內就能移植到你的系統,實現以上牛逼的功能!</li>
          <li>注意一點,bucket必須設置了Cors(Post打勾),不然沒有辦法上傳</li>
          <li>注意一點,把upload.js 里面的host/accessid/accesskey改成您上傳所需要的信息即可</li>
          <li>此方法是直接在前端簽名,有accessid/accesskey泄漏的風險, 線上生產請使用后端簽名例子<a href="https://help.aliyun.com/document_detail/oss/practice/pc_web_upload/js_php_upload.html">點擊查看詳細文檔</a></li>
          </ol>
          <br>
          <form name="theform">
            <input type="radio" name="myradio" value="local_name" checked=true/> 上傳文件名字保持本地文件名字
            <input type="radio" name="myradio" value="random_name" /> 上傳文件名字是隨機文件名
          <br/>
          上傳到指定目錄:<input type="text" id='dirname' placeholder="如果不填,默認是上傳到根目錄" size=50>
          </form>
          
          <h4>您所選擇的文件列表:</h4>
          <div id="ossfile">你的瀏覽器不支持flash,Silverlight或者HTML5!</div>
          
          <br/>
          
          <div id="container">
          	<a id="selectfiles" href="javascript:void(0);" class='btn'>選擇文件</a>
          	<a id="postfiles" href="javascript:void(0);" class='btn'>開始上傳</a>
          </div>
          
          <pre id="console"></pre>
          
          <p> </p>
          
          </body>
          <script type="text/javascript" src="lib/plupload-2.1.2/js/plupload.full.min.js"></script>
          <script type="text/javascript" src="upload.js"></script>
          </html>

          upload.js代碼如下:

          host='http://mybucket.oss-cn-beijing.aliyuncs.com';
          accessid='LTAI8N***mXX8cr';
          signature="pgxE8V******Wz1jKv7cQV7uBE=";
          policyBase64="eyJleHBpcmF0aW9uIjoiMjAyNS0xMi0zMVQyMzo1OTo1OVoiLCJjb25kaXRpb25zIjpbWyJjb250ZW50LWxlbmd0aC1yYW5nZSIsMCwxMDQ4NTc2MDBdXX0=";
          
          g_dirname=''
          g_object_name=''
          g_object_name_type=''
          now=timestamp=Date.parse(new Date()) / 1000; 
          
          function check_object_radio() {
              var tt=document.getElementsByName('myradio');
              for (var i=0; i < tt.length ; i++ )
              {
                  if(tt[i].checked)
                  {
                      g_object_name_type=tt[i].value;
                      break;
                  }
              }
          }
          
          function get_dirname()
          {
              dir=document.getElementById("dirname").value;
              if (dir !='' && dir.indexOf('/') !=dir.length - 1)
              {
                  dir=dir + '/'
              }
              //alert(dir)
              g_dirname=dir
          }
          
          function random_string(len) {
            len=len || 32;
            var chars='ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678';   
            var maxPos=chars.length;
            var pwd='';
            for (i=0; i < len; i++) {
                pwd +=chars.charAt(Math.floor(Math.random() * maxPos));
              }
              return pwd;
          }
          
          function get_suffix(filename) {
              pos=filename.lastIndexOf('.')
              suffix=''
              if (pos !=-1) {
                  suffix=filename.substring(pos)
              }
              return suffix;
          }
          
          function calculate_object_name(filename)
          {
              if (g_object_name_type=='local_name')
              {
                  g_object_name +="${filename}"
              }
              else if (g_object_name_type=='random_name')
              {
                  suffix=get_suffix(filename)
                  g_object_name=g_dirname + random_string(10) + suffix
              }
              return ''
          }
          
          function get_uploaded_object_name(filename)
          {
              if (g_object_name_type=='local_name')
              {
                  tmp_name=g_object_name
                  tmp_name=tmp_name.replace("${filename}", filename);
                  return tmp_name
              }
              else if(g_object_name_type=='random_name')
              {
                  return g_object_name
              }
          }
          
          function set_upload_param(up, filename, ret)
          {
              g_object_name=g_dirname;
              if (filename !='') {
                  suffix=get_suffix(filename)
                  calculate_object_name(filename)
              }
              new_multipart_params={
                  'key' : g_object_name,
                  'policy': policyBase64,
                  'OSSAccessKeyId': accessid, 
                  'success_action_status' : '200', //讓服務端返回200,不然,默認會返回204
                  'signature': signature,
              };
          
              up.setOption({
                  'url': host,
                  'multipart_params': new_multipart_params
              });
          
              up.start();
          }
          
          var uploader=new plupload.Uploader({
          	runtimes : 'html5,flash,silverlight,html4',
          	browse_button : 'selectfiles', 
          	container: document.getElementById('container'),
          	flash_swf_url : 'lib/plupload-2.1.2/js/Moxie.swf',
          	silverlight_xap_url : 'lib/plupload-2.1.2/js/Moxie.xap',
              url : 'http://oss.aliyuncs.com',
          
          	init: {
          		PostInit: function() {
          			document.getElementById('ossfile').innerHTML='';
          			document.getElementById('postfiles').onclick=function() {
                      set_upload_param(uploader, '', false);
                      return false;
          			};
          		},
          
          		FilesAdded: function(up, files) {
          			plupload.each(files, function(file) {
          				document.getElementById('ossfile').innerHTML +='<div id="' + file.id + '">' + file.name + ' (' + plupload.formatSize(file.size) + ')<b></b>'
          				+'<div class="progress"><div class="progress-bar" style="width: 0%"></div></div>'
          				+'</div>';
          			});
          		},
          
          		BeforeUpload: function(up, file) {
                      check_object_radio();
                      get_dirname();
                      set_upload_param(up, file.name, true);
                  },
          
          		UploadProgress: function(up, file) {
          			var d=document.getElementById(file.id);
          			d.getElementsByTagName('b')[0].innerHTML='<span>' + file.percent + "%</span>";
                      var prog=d.getElementsByTagName('div')[0];
          			var progBar=prog.getElementsByTagName('div')[0]
          			progBar.style.width=2*file.percent+'px';
          			progBar.setAttribute('aria-valuenow', file.percent);
          		},
          
          		FileUploaded: function(up, file, info) {
                      if (info.status==200)
                      {
                          document.getElementById(file.id).getElementsByTagName('b')[0].innerHTML='upload to oss success, object name:' + get_uploaded_object_name(file.name);
                      }
                      else
                      {
                          document.getElementById(file.id).getElementsByTagName('b')[0].innerHTML=info.response;
                      } 
          		},
          
          		Error: function(up, err) {
          			document.getElementById('console').appendChild(document.createTextNode("\nError xml:" + err.response));
          		}
          	}
          });
          
          uploader.init();

          其中:host為OSS存儲桶endpoint地址、accessid為阿里云賬號ID、signature為后端生成的簽名、policyBase64為規則json串的base64編碼

          訪問上傳的文件

          有多種方式可以查看你上傳的文件,詳細操作見阿里云OSS操作手冊。這里只說明一種直接通過URL訪問的方式。

          針對該bucket設置為開通“靜態頁面”、權限管理設置為“公共可讀”、防盜鏈設置“referer”等安全選項,然后就可以通過類似

          http://mybucket.oss-cn-beijing.aliyuncs.com/upload/lee

          的方式訪問你上傳的圖片等文件了。

          管理器

          托管JavaScript庫并提供用于獲取和打包它們的工具。

          • npm - npm是JavaScript的包管理器。
          • Bower - 網絡包管理器。
          • component - 用于構建更好的Web應用程序的客戶端包管理。
          • spm - 全新的靜態包管理器。
          • jam - 使用以瀏覽器為中心且與RequireJS兼容的存儲庫的包管理器。
          • jspm - 無摩擦瀏覽器包管理。
          • 恩德 - 無庫圖書館。
          • volo - 從模板創建前端項目,添加依賴項并自動生成項目。
          • Duo - 下一代軟件包管理器,融合了Component,Browserify和Go的最佳創意,使組織和編寫前端代碼快速而輕松。
          • yarn - 快速,可靠,安全的依賴管理。

          加載器 (Loaders)

          • JavaScript的模塊或加載系統。
          • RequireJS - JavaScript的文件和模塊加載器。
          • browserify - 瀏覽器端require()node.js方式。
          • SeaJS - Web的模塊加載器。
          • HeadJS - HEAD中唯一的腳本。
          • curl - 一個小型,快速,可擴展的模塊加載器,可處理AMD,CommonJS模塊/ 1.1,CSS,HTML /文本和舊腳本。
          • lazyload - 微小的,無依賴的異步JavaScript和CSS加載器。
          • script.js - 異步JavaScript加載器和依賴項管理器。
          • systemjs - 符合AMD,CJS和ES6規范的模塊加載器。
          • LodJS - 基于AMD的模塊加載器。
          • ESL - 模塊加載器瀏覽器首先,支持懶惰定義和AMD。
          • modulejs - 輕量級JavaScript模塊系統。

          Bundlers

          • browserify - Browserify允許您通過捆綁所有依賴項來在瀏覽器中(“模塊”)。
          • webpack - 為瀏覽器打包CommonJs / AMD模塊。
          • Rollup - 下一代ES6模塊捆綁器。
          • Brunch - 具有簡單聲明配置的快速前端Web應用程序構建工具。
          • Parcel - 快速,零配置Web應用程序捆綁器。

          測試框架

          構架

          • mocha - 簡單,靈活,有趣的node.js和瀏覽器JavaScript測試框架。
          • jasmine - DOM-less簡單的JavaScript測試框架。
          • qunit - 一個易于使用的JavaScript單元測試框架。
          • jest - 無痛的JavaScript單元測試。
          • prova - 基于Tape和Browserify的節點和瀏覽器測試運行器
          • DalekJS - 使用JavaScript實現自動跨瀏覽器功能測試
          • Protractor - Protractor是AngularJS應用程序的端到端測試框架。
          • tape - 用于節點和瀏覽器的Tap生成測試工具。
          • TestCafe - 針對現代Web開發堆棧的自動瀏覽器測試。
          • ava - 未來的JavaScript測試運行器

          斷言

          • chai - node.js的BDD / TDD斷言框架和可以與任何測試框架配對的瀏覽器。
          • Enzyme - Enzyme是React的JavaScript測試實用程序,可以更容易地斷言,操作和遍歷React Components的輸出。
          • 反應測試庫 - 簡單而完整的React DOM測試實用程序,可以鼓勵良好的測試實踐。
          • Sinon.JS - 測試JavaScript的間諜,存根和模擬。
          • expect.js - Node.JS和瀏覽器的簡約BDD風格斷言。

          覆蓋

          • istanbul - 又一個JS代碼覆蓋工具。
          • blanket - 一個簡單的JavaScript代碼覆蓋庫。瀏覽器和nodejs易于安裝和使用。
          • JSCover - JSCover是一個測量JavaScript程序代碼覆蓋率的工具。

          Runner

          • phantomjs - Scriptable Headless WebKit。
          • slimerjs - 運行Gecko的類似PhantomJS的工具。
          • casperjs - PhantomJS和SlimerJS的導航腳本和測試實用程序。
          • zombie - 使用node.js進行瘋狂快速,全棧,無頭瀏覽器測試
          • totoro - 一個簡單而穩定的跨瀏覽器測試工具。
          • karma - JavaScript的壯觀測試賽跑者。
          • nightwatch - 基于node.js和selenium webdriver的UI自動化測試框架。
          • nightwatch - UI - JavaScript的下一代代碼測試堆棧。
          • yolpo - 瀏覽器中的語句JavaScript解釋器。

          質量檢查工具

          • prettier - Prettier是一個自以為是的代碼格式化程序。
          • JSHint - JSHint是一個有助于檢測JavaScript代碼中的錯誤和潛在問題的工具。
          • jscs - JavaScript代碼樣式檢查器。
          • jsfmt - 用于格式化,搜索和重寫JavaScript。
          • jsinspect - 檢測復制粘貼和結構相似的代碼。
          • buddy.js - JavaScript的幻數檢測。
          • ESLint - 一種完全可插入的工具,用于識別和報告JavaScript中的模式。
          • JSLint - 高標準,嚴格和固定的代碼質量工具,旨在保持語言的優秀部分。
          • JavaScript標準樣式 - 意見,無配置樣式指南,樣式檢查器和格式化程序

          MVC框架和庫

          • angular.js - 針對網絡應用增強的HTML。
          • aurelia - 適用于移動,桌面和Web的JavaScript客戶端框架。
          • backbone - 為您的JS應用程序提供模型,視圖,集合和事件的一些骨干。
          • ember.js - 用于創建雄心勃勃的Web應用程序的JavaScript框架。
          • meteor - 一個超簡單,數據庫無處不在的數據線上純javascript Web框架。
          • ractive - 下一代DOM操作。
          • vue - 用于構建交互式界面的直觀,快速和可組合的MVVM。
          • knockout - Knockout可以更輕松地使用JavaScript創建豐富的響應式UI。
          • spine - 用于構建JavaScript應用程序的輕量級MVC庫。
          • espresso.js - 用于制作用戶界面的最小JavaScript庫。
          • canjs - 可以做JS,更好,更快,更容易。
          • react - 用于構建用戶界面的庫。它具有聲明性,高效性和極其靈活性。適用于虛擬DOM。
          • hyperapp - 用于構建前端應用程序的1kb JavaScript庫。
          • preact - 使用相同的ES6 API快速3kb React替代方案。組件和虛擬DOM。
          • nativescript - 使用JavaScript構建真正的原生跨平臺iOS和Android應用程序。
          • react-native - 使用React構建本機應用程序的框架。
          • riot - 類似React的庫,但體積非常小。
          • thorax - 加強你的骨干。
          • chaplin - 使用Backbone.js庫的JavaScript應用程序的體系結構。
          • marionette - Backbone.js的復合應用程序庫,旨在簡化大型JavaScript應用程序的構建。
          • ripple - 構建反應性視圖的微小基礎。
          • rivets - 輕量級和強大的數據綁定+模板解決方案。
          • derby - MVC框架,可以輕松編寫在Node.js和瀏覽器中運行的實時協作應用程序。
          • derby-awesome - 一系列令人敬畏的德比組件
          • way.js - 簡單,輕量,持久的雙向數據綁定。
          • mithril.js - Mithril是一個客戶端MVC框架(輕量級,健壯,快速)。
          • jsblocks - jsblocks是更好的MV-ish框架。
          • LiquidLava - 用于構建用戶界面的透明MVC框架。
          • feathers - 明天應用程序的極簡主義實時JavaScript框架。
          • Keo - 具有Shadow DOM支持的功能無狀態React組件。
          • atvjs - 使用純JavaScript快速開發Apple TV應用程序

          基于Node的CMS框架

          • KeystoneJS - 功能強大的CMS和Web應用程序框架。
          • Reaction Commerce - 反應式CMS,實時架構和設計。
          • Ghost - 簡單,強大的發布平臺。
          • Apostrophe - CMS內容編輯和基本服務。
          • We.js - 實時應用程序,網站或博客的框架。
          • Hatch.js - 具有社交功能的CMS平臺。
          • TaracotJS - 基于Node.js的快速簡約CMS。
          • Nodizecms - 適用于CoffeeScript愛好者的CMS。
          • Cody - CMS與WSYWYG編輯器。
          • PencilBlue - CMS和博客平臺。

          模板引擎

          模板引擎允許您執行字符串插值。

          • mustache.js - JavaScript中{{mustaches}}的最小模板。
          • handlebars.js - Mustache模板語言的擴展。
          • nunjucks - 來自Mozilla的JavaScript豐富而強大的模板語言。
          • hogan.js - Mustache模板語言的編譯器。
          • doT - nodejs和瀏覽器的最快+簡潔的JavaScript模板引擎。
          • dustjs - 瀏覽器和node.js的異步模板。
          • eco - 嵌入式CoffeeScript模板。
          • JavaScript-Templates - <1KB輕量級,快速且功能強大的JavaScript模板引擎,具有零依賴性。
          • t.js - 一個小的JavaScript模板框架,約400字節gzip壓縮。
          • Pug - 用于nodejs的強大,優雅,功能豐富的模板引擎。 (以前稱為玉)
          • EJS - 有效的JavaScript模板。
          • xtemplate - 節點和瀏覽器的可擴展模板引擎庫
          • marko - 一個快速,輕量級,基于HTML的模板引擎,用于Node.js和瀏覽器,具有異步,流,自定義標簽和CommonJS模塊作為編譯輸出。
          • swig - 一個簡單,功能強大且可擴展的Node.js和基于瀏覽器的JavaScript模板引擎。

          數據可視化

          用于Web的數據可視化工具。

          • d3 - 用于HTML和SVG的JavaScript可視化庫。
          • metrics-graphics - 針對簡潔,有原則的數據圖形和布局進行優化的庫。
          • pykcharts.js - 精心設計的d3.js圖表??,沒有d3.js的復雜性。
          • three.js - JavaScript 3D庫。
          • Chart.js - 使用標記的簡單HTML5圖表。
          • paper.js - 瑞士軍刀矢量圖形腳本 - 使用HTML5 Canvas移植到JavaScript和瀏覽器的Scriptographer。
          • fabric.js - JavaScript Canvas Library,SVG-to-Canvas(&canvas-to-SVG)Parser。
          • peity - 漸進式條形圖,折線圖和餅圖。
          • raphael - JavaScript矢量庫。
          • echarts - 企業圖表。
          • vis - 基于瀏覽器的動態可視化庫。
          • two.js - 用于網絡的渲染器不可知的二維繪圖api。
          • g.raphael - Rapha?l的圖表。
          • sigma.js - 專用于圖形繪制的JavaScript庫。
          • arbor - 使用Web worker和jQuery的圖形可視化庫。
          • cubism - 用于可視化時間序列的D3插件。
          • dc.js - 多維圖表,可與使用d3.js渲染的交叉過濾器本機工作
          • vega - 可視化語法。
          • processing.js - Processing.js使您的數據可視化使用Web標準并且沒有任何插件。
          • envisionjs - 動態HTML5可視化。
          • rickshaw - 用于創建交互式實時圖的JavaScript工具包。
          • flot - jQuery的迷人JavaScript圖表。
          • morris.js - 漂亮的時間序列線圖。
          • nvd3 - 為d3.js構建可重用的圖表和圖表組件。
          • svg.js - 一個用于操作和動畫SVG的輕量級庫。
          • heatmap.js - 基于HTML5畫布的熱圖的JavaScript庫。
          • jquery.sparkline - jQuery JavaScript庫的插件,可直接在瀏覽器中生成小的迷你圖表。
          • xCharts - 基于D3的庫,用于構建自定義圖表和圖形。
          • trianglify - 低聚風格背景發生器與d3.js.
          • d3-cloud - 在JavaScript中創建單詞云。
          • d4 - D3的友好可重用圖表DSL。
          • dimple.js - 由d3支持的簡單業務分析圖表。
          • chartist-js - 簡單的響應式圖表。
          • epoch - 通用實時圖表庫。
          • c3 - 基于D3的可重用圖表庫。
          • BabylonJS - 使用HTML 5和WebGL構建3D游戲的框架。
          • recharts - 使用React和D3構建的重新定義的圖表庫。
          • GraphicsJS - 一個輕量級JavaScript圖形庫,具有基于SVG / VML技術的直觀API。
          • mxGraph - 圖表庫,可以快速創建交互式圖形和圖表應用程序,這些應用程序可以在其供應商支持的任何主要瀏覽器中本機運行。
          • 還有一些很棒的商業庫,如amchart,anychart,plotly和highchart。

          時間線

          • TimelineJS v3 - 用JavaScript構建的講故事時間軸。
          • timesheet.js - 簡單HTML5和CSS3時間表的JavaScript庫。

          電子表格

          • HANDSONTABLE - Handsontable是面向開發人員的JavaScript / HTML5電子表格庫

          編輯器

          • ace - Ace(Ajax.org Cloud9編輯器)。
          • CodeMirror - 瀏覽器內代碼編輯器。
          • esprima - 用于多功能分析的ECMAScript解析基礎設施。
          • quill - 帶有API的跨瀏覽器的富文本編輯器。
          • medium-editor - Medium.com WYSIWYG編輯器克隆。
          • pen - 享受現場編輯(+Markdown)。
          • jquery-notebook - 一個簡單,干凈,優雅的文本編輯器。靈感來自Medium的精彩。
          • bootstrap-wysiwyg - 與Tiny bootstrap兼容的WYSIWYG富文本編輯器。
          • ckeditor-releases - 適合所有人的最佳網絡文本編輯器。
          • editor - Markdown編輯。仍處于發展階段。
          • EpicEditor - 一個可嵌入的JavaScript Markdown編輯器,具有分屏全屏編輯,實時預覽,自動草稿保存,離線支持等功能。
          • jsoneditor - 一個基于Web的工具,用于查看,編輯和格式化JSON。
          • vim.js - 帶有持久性?/ .vimrc的Vim的JavaScript端口。
          • Squire - HTML5富文本編輯器。
          • TinyMCE - JavaScript Rich Text編輯器。
          • trix - 用于日常寫作的富文本編輯器。通過Basecamp。
          • Trumbowyg - 一個輕量級且令人驚嘆的WYSIWYG JavaScript編輯器。
          • Draft.js - 用于構建文本編輯器的React框架。
          • bootstrap-wysihtml5 - 簡單,漂亮的所見即所得的編輯器
          • wysihtml5 - 基于HTML5的開源富文本編輯器和漸進增強方法。使用復雜的安全性概念,旨在通過防止不可維護的標簽湯和內聯樣式來生成完全有效的HTML5標記。
          • raptor-editor - Raptor,HTML5 WYSIWYG內容編輯器!
          • popline - Popline是一個HTML5富文本編輯器工具欄。

          文檔

          • DevDocs是一個一體化的API文檔閱讀器,具有快速,有條理和一致的界面。
          • dexy是一種自由形式的文化文檔工具,用于編寫包含代碼的任何類型的技術文檔。
          • docco是一個快速,骯臟,百行,文化編程風格的文檔生成器。
          • styledocco從樣式表生成文檔和樣式指南文檔。
          • Ronn制作手冊。它將簡單的,人類可讀的文本文件轉換為roff用于終端顯示,也轉換為HTML用于Web。
          • dox是一個用節點編寫的JavaScript文檔生成器。 Dox不再為您的文檔生成固定的結構或樣式,它只是為您提供JSON表示,允許您使用markdown和JSDoc樣式的標記。
          • jsdox是一個JSDoc3到Markdown文檔生成器。
          • ESDoc是一個很好的JavaScript文檔生成器。
          • YUIDoc是一個Node.js應用程序,它使用類似于Javadoc和Doxygen等工具的語法,從源代碼中的注釋生成API文檔。
          • coddoc是一個jsdoc解析庫。 Coddoc的不同之處在于,它允許用戶通過使用coddoc.addTagHandler和coddoc.addCodeHandler添加標記和代碼解析器,從而可以輕松擴展。 coddoc還解析了在API中使用的源代碼。
          • sphinx是一款可輕松創建智能和精美文檔的工具
          • 使用JSDoc
          • Beautiful docs是一個基于markdown文件的文檔查看器。
          • documentation.js - 支持ES2015 +和流程注釋的API文檔生成器。
          • jsduck - 為Sencha JavaScript框架制作的API文檔生成器,但也可用于其他框架。

          文件

          用于處理文件的庫。

          • Papa Parse - 一個功能強大的CSV庫,支持解析CSV文件/字符串并導出為CSV。
          • jBinary - 具有聲明性語法的二進制文件的高級I / O(加載,解析,操作,序列化,保存),用于描述文件類型和數據結構。
          • diff2html - Git diff輸出解析器和漂亮的HTML生成器。
          • jsPDF - JavaScript PDF生成。
          • PDF.js - JavaScript中的PDF閱讀器。

          函數編程

          函數式編程庫,用于擴展JavaScript的功能。

          • underscore - JavaScript的實用程序_腰帶。
          • lodash - 提供一致性,定制,性能和附加功能的實用程序庫。
          • Sugar - 用于處理本機對象的JavaScript庫。
          • lazy.js - 像下劃線,但更懶。
          • ramda - JavaScript程序員的實用函數庫。
          • mout - 模塊化JavaScript實用程序。
          • mesh - Streamable數據同步實用程序。
          • preludejs - JavaScript的硬核函數式編程。

          反應式編程

          反應式編程庫,以擴展JavaScript的功能。

          • RxJs - JavaScript的反應性擴展。
          • Bacon - 用于JavaScript的FRP(功能反應式編程)庫。
          • Kefir - 針對JavaScript的FRP庫,受到Bacon.js和RxJS的啟發,專注于高性能和低內存消耗。
          • Highland - 重新思考JavaScript實用程序帶,Highland輕松管理同步和異步代碼,僅使用標準JavaScript和類似Node的Streams。
          • Most.js - 高性能FRP庫。
          • MobX - 用于簡單,可擴展狀態管理的TFRP庫。
          • Cycle.js - 一個功能強大且反應靈敏的JavaScript庫,用于更清晰的代碼。

          數據結構

          數據結構庫構建更復雜的應用程序。

          • immutable-js - 不可變數據集合,包括序列,范圍,重復,映射,OrderedMap,Set和稀疏向量。
          • mori - 一個庫,用于使用ClojureScript的持久數據結構,并從舒適的vanilla JavaScript中支持API。
          • 存儲桶 - 用JavaScript編寫的完整,經過全面測試和記錄的數據結構庫。
          • hashmap - 支持任何類型密鑰的簡單hashmap實現。

          日期

          日期庫。

          • moment - 在JavaScript中解析,驗證,操作和顯示日期。
          • moment-timezone - 時區支持moment.js。
          • jquery-timeago - 一個jQuery插件,可以輕松支持自動更新模糊時間戳(例如“4分鐘前”)。
          • timezone-js - 啟用時區的JavaScript Date對象。使用Olson zoneinfo文件獲取時區數據。
          • date - 人類的日期()。
          • ms.js - 微小的毫秒轉換實用程序。
          • countdown.js - 超級簡單的倒計時。
          • timeago.js - 簡單的庫(小于2kb)用于格式化日期與*** time ago語句。
          • fecha - 輕量級日期格式化和解析(~2KB)。意味著要取代moment.js的解析和格式化功能。
          • date-fns - 現代JavaScript日期實用程序庫。
          • map-countdown - 基于Google地圖構建的瀏覽器倒計時

          字符串

          字符串庫。

          • voca - 終極JavaScript字符串庫
          • selecting - 允許您訪問用戶選擇的文本的庫。
          • underscore.string - Underscore.js JavaScript庫的字符串操作擴展。
          • string.js - 額外的JavaScript字符串方法。
          • he - 用JavaScript編寫的強大的HTML實體編碼器/解碼器。
          • multiline - JavaScript中的多行字符串。
          • query-string - 解析和字符串化URL查詢字符串。
          • URI.js - JavaScript URL變異庫。
          • jsurl - 使用JavaScript進行輕量級URL操作。
          • sprintf.js - sprintf實現。
          • url-pattern - 比url和其他字符串的正則表達式字符串匹配模式更容易。將字符串轉換為數據或數據為字符串。

          數字

          • Numeral-js - 用于格式化和操作數字的JavaScript庫。
          • chance.js - JavaScript中的隨機生成器助手。可以生成數字,字符串等。
          • odometer - 輕松過渡數字。
          • accounting.js - 用于數字,貨幣和貨幣格式的輕量級JavaScript庫 - 完全可本地化,零依賴性。
          • money.js - 一個小的(1kb)JavaScript貨幣轉換庫,用于web和nodeJS。
          • Fraction.js - JavaScript的有理數字庫。
          • Complex.js - JavaScript的復數庫。
          • Polynomial.js - JavaScript的多項式庫。

          存儲

          • store.js - 所有瀏覽器的LocalStorage包裝器,不使用cookie或flash。使用localStorage,globalStorage和userData行為。
          • localForage - 改進的離線存儲。使用簡單但功能強大的API包裝IndexedDB,WebSQL或localStorage。
          • jStorage - jStorage是一個簡單的鍵/值數據庫,用于在瀏覽器端存儲數據。
          • cross-storage - 跨域本地存儲,具有權限。
          • basket.js - 用于使用localStorage緩存和加載腳本的腳本和資源加載器。
          • bag.js - 一個緩存腳本和資源加載器,類似于basket.js,但具有額外的k / v接口和localStorage / websql / indexedDB支持。
          • basil.js - 缺少的JavaScript智能持久層。
          • jquery-cookie - 一個簡單,輕量級的jQuery插件,用于讀取,寫入和刪除cookie。
          • js-cookie - 用于處理瀏覽器cookie的簡單輕量級JavaScript API。
          • Cookie - JavaScript客戶端Cookie操作庫。
          • DB.js - 基于Promise的IndexDB Wrapper庫。
          • lawnchair.js - 簡單的客戶端JSON存儲。
          • sql.js - 通過Emscripten編譯為JavaScript的SQLite。

          Color(顏色)

          • randomColor - JavaScript的顏色生成器。
          • chroma.js - 用于各種顏色操作的JavaScript庫。
          • color - JavaScript顏色轉換和操作庫。
          • colors - 網絡上顏色的更智能默認值。
          • PleaseJS - 用于創建隨機賞心悅目的顏色和配色方案的JavaScript庫。
          • TinyColor - 快速,小巧的顏色處理和JavaScript轉換。
          • Vibrant.js - 從圖像中提取突出的顏色。

          I18n和L10n

          本地化(l10n)和國際化(i18n)JavaScript庫。

          • i18next - 使用JavaScript輕松實現國際化(i18n)。
          • polyglot - tiny i18n helper library。
          • babelfish - i18n具有人性化的API并內置復數支持。
          • ttag - 基于ES6標記模板和良好的舊GNU gettext的現代javascript i18n本地化庫。

          控制流

          • async - 節點和瀏覽器的異步實用程序。
          • q - 用于在JavaScript中創建和編寫異步promise的工具。
          • step - 一個異步控制流庫,可以輕松地逐步執行邏輯。
          • contra - 具有功能性的異步流量控制。
          • Bluebird - 功能齊全的承諾庫,專注于創新功能和性能。
          • when - 一個可靠,快速的Promises / A +和when()實現,以及其他異步好東西。
          • ObjectEventTarget - 提供一個原型,為事件偵聽器添加支持(在瀏覽器上可用的DOMElements中具有相同的EventTarget行為)。

          路由

          • director - 一個用于JavaScript的小而同構的URL路由器。
          • page.js - 受Express路由器啟發的微客戶端路由器(~1200字節)。
          • pathjs - 用于Web瀏覽器的簡單輕量級路由。
          • crossroads- JavaScript路線。
          • davis.js - 使用pushState的RESTful可降級JavaScript路由。

          安全

          • DOMPurify - 用于HTML,MathML和SVG的僅限DOM,超快速,超級容忍的XSS清理程序。
          • js-xss - 使用白名單指定的配置清理不受信任的HTML(以防止XSS)。
          • xss-filters - 雅虎安全的XSS過濾器。

          日志

          • log - 帶有樣式的Console.log。
          • Conzole - 一個用JavaScript構建的調試面板,它在頁面內顯示的面板中包裝JavaScript本機控制臺對象方法和功能。
          • console.log-wrapper - 在任何瀏覽器中清楚地記錄到控制臺。
          • loglevel - JavaScript的最小輕量級日志記錄,添加可靠的日志級別方法來包裝任何可用的console.log方法。
          • minilog - 使用Stream-API后端的輕量級客戶端和服務器端日志記錄。
          • storyboard - 通用日志庫+ Chrome擴展;它允許您在一個位置查看由用戶操作觸發的所有客戶端和服務器任務。

          正則表達式

          • RegEx101 - 用于JavaScript的在線正則表達式測試器和調試器。還支持Python,PHP和PCRE。
          • RegExr - 基于HTML / JS的工具,用于創建,測試和學習正則表達式。
          • RegExpBuilder - 使用鏈式方法創建正則表達式。

          語音控制

          • annyang - 一個JavaScript庫,用于使用語音識別向您的站點添加語音命令。
          • voix.js - 一個JavaScript庫,用于為您的網站,應用或游戲添加語音命令。

          API

          • axios - 基于Promise的HTTP客戶端,用于瀏覽器和node.js.
          • bottleneck- 一種強大的速率限制器,可以輕松控制節流。
          • oauth-signature-js - 用于節點和瀏覽器的JavaScript OAuth 1.0a簽名生成器。
          • amygdala - 用于JavaScript驅動的Web應用程序的RESTful HTTP客戶端。
          • jquery.rest - 一個jQuery插件,可以輕松使用RESTful API。
          • Rails Ranger - Ruby on Rails API的固定REST客戶端。

          流(Streaming)

          • Tailor - 前端微服務的流媒體布局服務,受Facebook的BigPipe啟發。

          視覺檢測

          • tracking.js - 網絡上計算機視覺的現代方法。
          • ocrad.js - 通過Emscripten在JavaScript中進行OCR。

          機器學習

          • ConvNetJS - JavaScript中的深度學習。在您的瀏覽器中訓練卷積神經網絡(或普通的)。
          • DN2A - 數字神經網絡架構。
          • Brain.js - JavaScript中的神經網絡。
          • Mind.js - 一個靈活的神經網絡庫。
          • Synaptic.js - node.js和瀏覽器的免架構神經網絡庫。
          • TensorFlow.js - 用于在瀏覽器和Node.js上訓練和部署ML模型的JavaScript庫。
          • ml5.js - 友好的網絡機器學習。

          瀏覽器檢測

          • bowser - 瀏覽器探測器。

          基準

          • benchmark.js - 基準測試庫。正如在jsPerf.com上使用的那樣。
          • matcha - 以咖啡因為導向,簡單化的基準測試方法。

          代碼突出顯示

          • Highlight.js - JavaScript語法高亮顯示。
          • PrismJS - 輕巧,強大,優雅的語法高亮。

          加載狀態

          用于指示負載狀態的庫。

          • Mprogress.js - 創建Google Material Design進度線性欄。
          • NProgress - 用于Ajax'y應用程序的超薄進度條。
          • Spin.js - 旋轉活動指標。
          • progress.js - 為頁面上的每個對象創建和管理進度條。
          • progressbar.js - 具有動畫SVG路徑的美麗且響應迅速的進度條。
          • pace - 自動為您的網站添加進度條。
          • topbar - Tiny&beautiful全站點進度指示器。
          • nanobar - 非常輕量級的進度條。沒有jQuery。
          • PageLoadingEffects - 使用SVG動畫顯示新內容的現代方式。
          • SpinKit - 使用CSS動畫的加載指示符的集合。
          • Ladda - 帶內置裝載指示器的按鈕。
          • css-loaders - 使用CSS動畫加載微調器的集合
          • 除了庫之外,還有Codepen上的Collection,以及Ajaxload,Preloaders和CSSLoad等生成器。

          驗證

          • Parsley.js - 無需編寫單行JavaScript即可驗證表單前端。
          • jquery-validation - jQuery Validation Plugin。
          • validator.js - 字符串驗證和清理。
          • validate.js - 受CodeIgniter啟發的輕量級JavaScript表單驗證庫。
          • validatr - 跨瀏覽器HTML5表單驗證。
          • FormValidation - 驗證表單字段的最佳jQuery插件。以前的BootstrapValidator。
          • is.js - 檢查類型,正則表達式,狀態,時間等。
          • FieldVal - 多用途驗證庫。支持同步和異步驗證。

          鍵盤包裝

          • mousetrap - 用于處理JavaScript中鍵盤快捷鍵的簡單庫。
          • keymaster - 用于定義和分派鍵盤快捷鍵的簡單微庫。
          • Keypress - 鍵盤輸入捕獲實用程序,其中任何鍵都可以是修飾鍵。
          • KeyboardJS - 用于綁定鍵盤組合的JavaScript庫,沒有鍵碼和鍵組合沖突的痛苦。
          • jquery.hotkeys - jQuery Hotkeys讓您可以在代碼中的任何位置查看鍵盤事件,幾乎可以支持任何組合鍵。
          • jwerty - 鍵盤事件的真棒處理。

          旅游和指南

          • intro.js - 為您的網站和項目提供新功能介紹和分步用戶指南的更好方法。
          • shepherd - 引導您的用戶瀏覽您的應用。
          • bootstrap-tour - 使用Twitter Bootstrap Popovers快速輕松地進行產品導覽。
          • tourist - - 為您的應用程序提供簡單靈活的旅游。
          • chardin.js - 適用于您的應用的簡單疊加說明。
          • pageguide - 使用jQuery和CSS3的網頁元素的交互式指南。
          • hopscotch - 一個框架,使開發人員可以輕松地將產品導覽添加到他們的頁面。
          • joyride - jQuery feature tour插件。
          • focusable - 設置聚焦于DOM元素的聚光燈,將疊加層添加到頁面的其余部分。

          通知

          • iziToast - 優雅,響應靈活,輕量級的通知插件,沒有依賴關系。
          • messenger - 適用于您應用的Growl風格的提醒和消息。
          • noty - jQuery通知插件。
          • pnotify - Bootstrap,jQuery UI和Web Notifications Draft的JavaScript通知。
          • toastr - 簡單的JavaScript吐司通知。
          • humane-js - 一個簡單,現代的瀏覽器通知系統。
          • smoke.js - 針對JavaScript的框架無關的樣式警報系統。
          • notie - 沒有依賴關系的簡單通知和輸入。

          滑塊

          • Swiper - 移動觸摸滑塊和框架,帶有硬件加速轉換。
          • slick - 您需要的最后一個旋轉木馬。
          • slidesJs - 是一個響應式幻燈片插件,適用于JQuery(1.7.1+),具有觸摸和CSS3過渡等功能
          • FlexSlider - 一個非常棒的,完全響應的jQuery滑塊插件。
          • unslider - 最簡單的jQuery滑塊。
          • sly - 用于單向滾動的JavaScript庫,具有基于項目的導航支持。
          • vegas - 一個jQuery插件,可以為您的網頁添加漂亮的全屏背景。它甚至允許幻燈片播放。
          • Sequence - 用于創建響應式滑塊,演示文稿,橫幅和其他基于步驟的應用程序的CSS動畫框架。
          • reveal.js - 使用HTML輕松創建精美演示文稿的框架。
          • impress.js - 這是一個基于現代瀏覽器中CSS3轉換和轉換功能的演示框架,并受到prezi.com背后的想法的啟發。
          • bespoke.js - DIY演示微框架
          • Strut - Strut - 一個Impress.js和Bespoke.js演示編輯器
          • PhotoSwipe - 適用于移動和桌面的JavaScript圖像庫,模塊化,獨立于框架。
          • jcSlider - 一個帶有CSS動畫的響應式滑塊jQuery插件。
          • basic-jquery-slider - 使用簡單,主題簡單,易于定制。
          • jQuery.adaptive-slider - 一個帶有自適應彩色figcaption和導航的滑塊的jQuery插件。
          • slidr - 添加一些幻燈片效果。
          • Flickity - 觸摸,響應,可滑動的畫廊。
          • Glide.js - 響應和觸摸友好的jQuery滑塊。它簡單,輕便,快速。
          • jQuery.adaptive-slider - 一個帶有自適應彩色figcaption和導航的滑塊的jQuery插件。
          • Embla Carousel - 用于Web的可擴展低級旋轉木馬,用TypeScript編寫。

          范圍滑塊

          • Ion.RangeSlider - 功能強大且易于定制的范圍滑塊,具有多種選項和皮膚支持。
          • jQRangeSlider - 支持日期的JavaScript滑塊選擇器。
          • noUiSlider - 輕量級,高度可定制的范圍滑塊,無膨脹。
          • rangeslider.js - HTML5輸入范圍滑塊元素polyfill。

          表單小部件

          輸入

          • typeahead.js - 一個快速且功能齊全的自動完成庫。
          • tag-it - 用于處理多標記字段以及標記建議/自動完成的jQuery UI插件。
          • At.js - 添加GitHub就像提到你的應用程序的自動完成一樣。
          • Placeholders.js - HTML5占位符屬性的JavaScript polyfill。
          • fancyInput - 使用CSS3效果在輸入字段中輸入樂趣。
          • jQuery-Tags-Input - 使用這個jQuery插件將一個簡單的文本輸入神奇地轉換為一個很酷的標簽列表。
          • vanilla-masker - 純JavaScript掩碼輸入。
          • Ion.CheckRadio - 用于樣式復選框和單選按鈕的jQuery插件。有皮膚支持。
          • awesomplete - 超輕量級,可用,美觀的自動完成,零依賴。 -

          日歷

          • pickadate.js - 移動友好,響應迅速,輕量級的jQuery日期和時間輸入選擇器。
          • bootstrap-datepicker - 來自Stefan Petre(eyecon.ro)的@twitter bootstrap的日期選擇器,由@eternicode改進。
          • Pikaday - 一個令人耳目一新的JavaScript Datepicker - 輕量級,無依賴關系,模塊化CSS。
          • fullcalendar - 全尺寸拖放事件日歷(jQuery插件)。
          • rome - 可定制的日期(和時間)選擇器。免費依賴,選擇加入UI。
          • datedropper - datedropper是一個jQuery插件,提供了一種快速簡便的方法來管理輸入字段的日期。

          選擇

          • selectize.js - Selectize是文本框和選擇框的混合體。這是基于jQuery的,它具有自動完成和本機感鍵盤導航;對標記,聯系人列表等有用
          • select2 - 基于jQuery的選擇框替換。它支持搜索,遠程數據集和無限滾動結果。
          • chosen - 一個庫,用于制作更加友好的長而笨重的選擇框。

          文件上傳器

          • jQuery-File-Upload - 文件上傳小部件,包含多個文件選擇,拖放支持,進度條,驗證和預覽圖像,jQuery的音頻和視頻。
          • dropzone - Dropzone是一個易于使用的拖放庫。它支持圖像預覽并顯示很好的進度條。
          • flow.js - 一個JavaScript庫,通過HTML5 File API提供多個同步,穩定,容錯和可恢復/可重新啟動的文件上傳。
          • fine-uploader - 多文件上傳插件,帶有進度條,拖放,直接上傳到S3。
          • FileAPI - 一組用于處理文件的JavaScript工具。 Multiupload,drag'n'drop和chunked文件上傳。圖像:EXIF裁剪,調整大小和自動方向。
          • plupload - 用于處理文件上傳的JavaScript API,它支持多文件選擇,文件類型過濾,請求分塊,客戶端圖像縮放等功能,并使用不同的運行時來實現此功能,如HTML 5,Silverlight和Flash。

          其他

          • form - jQuery Form Plugin。
          • Garlic.js - 自動保留表單的文本并在本地選擇字段值,直到提交表單。
          • Countable - 一個JavaScript函數,用于向HT添加實時段落,字和字符計數

          模態和彈出窗口

          • Magnific-Popup - 輕巧且反應靈敏的燈箱腳本,專注于性能。
          • jquery-popbox - jQuery PopBox UI元素。
          • jquery.avgrund.js - 一個jQuery插件,帶有彈出窗口的新模態概念。
          • vex - 一個高度可配置且易于設計的現代對話庫。
          • bootstrap-modal - 擴展默認的Bootstrap Modal類。響應,可堆疊,ajax等。
          • css-modal - 由純CSS構建的模態。
          • jquery-popup-overlay - 用于響應和可訪問的模態窗口和工具提示的jQuery插件。
          • SweetAlert - JavaScript警報的絕佳替代品。
          • baguetteBox.js - 用純JavaScript編寫的簡單易用的lightbox腳本。
          • colorbox - 用于jQuery的輕量級可定制燈箱插件。
          • fancyBox - 一種工具,為您的網頁上的圖像,html內容和多媒體添加縮放功能提供了一種漂亮而優雅的方式。
          • swipebox - 可觸摸的jQuery燈箱
          • jBox - jBox是一個功能強大且靈活的jQuery插件,可以處理所有彈出窗口,工具提示,通知等。

          滾動

          • scrollMonitor - 滾動時監視元素的簡單快速API。
          • eadroom - 給你的頁面一些空間。隱藏您的標題,直到您需要它。
          • onepage-scroll - 使用One Page Scroll插件創建類似Apple的單頁卷軸網站(iPhone 5S網站)。
          • iscroll - iScroll是一款高性能,占用空間小,無依賴,多平臺的JavaScript滾動條。
          • skrollr - 適用于移動設備(Android + iOS)和桌面的獨立視差滾動庫。沒有jQuery。
          • parallax - 對智能設備方向作出反應的視差引擎。
          • stellar.js - 視差滾動變得容易。
          • plax - jQuery powered parallaxing。
          • jparallax - 用于創建交互式視差效果的jQuery插件。
          • fullPage - 一個簡單易用的插件,用于創建全屏滾動網站(也稱為單頁網站)。
          • ScrollMenu - 一個替換舊的無聊滾動條的新界面。
          • Clusterize.js - Tiny vanilla JS插件,可輕松顯示大型數據集。
          • simpleParallax - 簡單而小巧的JavaScript庫,可在任何圖像上添加視差動畫

          菜單

          • jQuery-menu-aim - 用戶光標瞄準特定下拉菜單項時觸發事件的jQuery插件。用于制作像亞馬遜這樣的響應式大型下拉菜單。
          • jQuery contextMenu - contextMenu manager。
          • Slideout - 用于移動網絡應用的響應式觸摸滑動導航菜單。
          • 滑動和滑動 - 可與touchSwipe庫配合使用的滑動滑動菜單。

          表/網格

          • jTable - 一個用于創建基于AJAX的CRUD表的jQuery插件。
          • DataTables - (jQuery插件)它是一個高度靈活的工具,基于漸進增強的基礎,并將為任何HTML表添加高級交互控件。
          • Tabulator - (jQuery插件)一個非常靈活的庫,可以從任何JSON數據源或現有HTML表創建具有一系列交互功能的表。
          • Bootstrap表 - 對流行的Bootstrap框架的擴展,用于創建適合您站點樣式的表,而無需額外的標記。
          • floatThead - (jQuery插件)在正文中滾動時鎖定任何表的標題。適用于任何表,不需要自定義html或CSS。
          • Masonry - 級聯網格布局庫。
          • Packery - 使用bin-packing算法的網格布局庫。可用于可拖動布局。
          • Isotope- 可過濾,可排序的網格布局庫??梢詫崿FMasonry,Packery和其他布局。
          • flexboxgrid - 基于CSS3 flexbox的網格。

          構架

          • 語義UI - 具有許多主題和元素的UI工具包。
          • w2ui - 一組用于數據驅動的Web應用程序前端開發的jQuery插件。
          • 流動性 - 世界上最小的完全響應的CSS框架。
          • Ink - SAPO使用的HTML5 / CSS3框架,用于快速有效的網站設計和原型設計。

          Boilerplates

          • html5-boilerplate - 一個專業的前端模板,用于構建快速,健壯且適應性強的Web應用程序或站點。
          • mobile-boilerplate - 一個前端模板,可幫助您構建快速,現代的移動Web應用程序。
          • webplate - 一個非常棒的前端框架,讓您可以專注于構建您的網站或應用程序,同時保持非常好用。
          • Cerberus - 響應式HTML電子郵件的一些簡單但可靠的模式。甚至在Outlook中。
          • full-page-intro-and-navigation - 帶有全寬背景圖像的介紹頁面,大膽的動畫菜單以及導航背后的類似iOS的模糊效果。
          • Fluid-Squares- 方形單元的流體網格。
          • Mobile-First-RWD - 移動優先響應式網頁設計的一個例子。
          • this-is-responsive - 這是響應。
          • npm run-scripts使用NPM運行腳本進行任務自動化。

          手勢

          • hammer.js - 用于多點觸控手勢的JavaScript庫。
          • touchemulator - 模擬桌面上的觸摸輸入。
          • Dragula - 拖放這么簡單就好疼。

          地圖

          • Leaflet - 適用于移動設備的交互式地圖的JavaScript庫。
          • Cesium - 開源WebGL虛擬地球儀和地圖引擎。
          • gmaps - 使用Google地圖的最簡單方法。
          • polymaps - 一個免費的JavaScript庫,用于在現代Web瀏覽器中制作動態交互式地圖。
          • kartograph.js - Kartograph SVG地圖的開源JavaScript渲染器。
          • mapbox.js - Mapbox JavaScript API,一個Leaflet插件。
          • jqvmap - jQuery矢量地圖庫。
          • OpenLayers3 - 一個高性能,功能豐富的庫,可滿足您的所有映射需求。

          視頻/音頻

          • prettyembed.js - Prettier嵌入你的YouTubes - 具有很好的選項,如高分辨率預覽圖像,嵌入選項的高級自定義,以及可選的FitVids支持。
          • html5media - 在所有主流瀏覽器中啟用和標記。
          • Play-em JS - Play'em是一個JavaScript組件,它管理音樂/視頻軌道隊列,并通過在HTML DIV(包括Youtube,Soundcloud和Vimeo)中嵌入多個玩家來播放一系列歌曲。
          • polyplayer - 使用一個API來規則YouTube,Soundcloud和Vimeo播放器。
          • flowplayer - 用于網絡的HTML5視頻播放器
          • mediaelement - HTML5或具有Flash和Silverlight填充程序的播放器,模仿HTML5 MediaElement API,在所有瀏覽器中實現一致的UI。 http://mediaelementjs.com/
          • SoundJS - 一個可以更輕松地在網絡上處理音頻的庫。它為在不同瀏覽器中播放音頻提供了一致的API。
          • video.js - Video.js - 開源HTML5和Flash視頻播放器。
          • FitVids.js - 一個輕量級,易于使用的jQuery插件,用于流體寬度視頻嵌入。
          • Ion.Sound - 任何網頁上的簡單聲音。
          • photobooth-js - 一個小部件,允許用戶在您的網站上拍攝他們的頭像。
          • clappr - 一個可擴展的網絡媒體播放器http://clappr.io

          活版印刷

          • FlowType.JS - 最好的Web排版:基于元素寬度的字體大小和行高。
          • BigText - jQuery插件,計算將一行文本與特定寬度匹配所需的字體大小和字間距。
          • circletype - 一個jQuery插件,可以讓你在網絡上輸入曲線。
          • slabText - 一個jQuery插件,用于生成大膽,響亮的標題。
          • simple-text-rotator - 在您的網站上添加一個超級簡單的旋轉文本,幾乎沒有標記。
          • novacancy.js - 文本Neon Golden效果jQuery插件。
          • jquery-responsive-text - 使文本大小響應!
          • FitText.js - 用于膨脹Web類型的jQuery插件。
          • Lettering.js - 一個輕量級,易于使用的JavaScript <span>注入器,用于激進的Web排版。

          動畫

          • velocity - 加速JavaScript動畫。
          • jquery.transit - jQuery的超級流暢的CSS3轉換和轉換。
          • impress.js - 在HTML文檔中使用CSS3轉換/轉換進行類似Prezi的演示。
          • bounce.js - 立即創建美味的CSS3動畫動畫。
          • GreenSock-JS - 適用于所有主流瀏覽器的高性能HTML5動畫。
          • TransitionEnd - TransitionEnd是一個不可知的跨瀏覽器庫,用于處理轉換事件。
          • Dynamic.js - 用于創建基于物理的CSS動畫的JavaScript庫。
          • the-cube - 多維數據集是CSS3過渡的實驗。
          • Effeckt.css - 一個高效的過渡和動畫庫
          • animate.css - CSS動畫的跨瀏覽器庫。因為易于使用易于使用。
          • textillate - CSS3文本動畫的簡單插件。
          • move.js - CSS3支持的JavaScript動畫框架。
          • animatable - 一個屬性,兩個值,無限可能。
          • shuffle-images - 以創造性的方式改變圖像的最簡單方法
          • smoothState.js - 使用jQuery進行不顯眼的頁面轉換。
          • Anime.js - 一個JavaScript動畫引擎
          • Mo.js - 用于網絡的運動圖形工具帶
          • particles.js - 用于創建粒子的輕量級JavaScript庫。

          圖像處理

          • lena.js - 具有過濾器和util函數的圖像處理庫。
          • Pica - 高質量圖像調整大?。ㄊ褂每焖貺anczos過濾器,在純JS中實現)。
          • cropper - 一個簡單的jQuery圖像裁剪插件。

          ES6

          • es6features - ECMAScript 6功能概述。
          • es6-features - ECMAScript 6:功能概述和比較。
          • es6-cheatsheet - ES2015 [ES6] cheatsheet包含提示,技巧,最佳實踐和代碼片段。
          • ECMAScript 6兼容性表 - 適用于各種環境的所有ECMAScript 6功能的兼容性表。
          • Babel(以前為6to5) - 將ES6 +代碼轉換為vanilla ES5,沒有運行時。
          • Traceur編譯器 - ES6功能> ES5。包括類,生成器,承諾,解構模式,默認參數等。

          產生器

          • Gatsby.js - 基于React的靜態站點生成器。

          SDK

          • javascript-sdk-design - 從工作和個人經驗中提取的JavaScript SDK設計指南
          • Spotify SDK - 面向實體的SDK,可與Spotify Web API配合使用。
          • Square Node.js SDK - 用于支付和其他Square API的JavaScript客戶端庫。

          雜項

          • echo - 具有data- *屬性的延遲加載圖像。
          • picturefill - 用于<picture>,srcset,sizes的響應式圖像polyfill。
          • platform.js - 幾乎適用于所有JavaScript平臺的平臺檢測庫。
          • json3 - 與幾乎所有JavaScript平臺兼容的現代JSON實現。
          • Logical Or Not - 關于JavaScript特性的游戲。
          • BitSet.js - JavaScript Bit-Vector實現
          • spoiler-alert - SPOILER ALERT!一個快樂的小jquery插件,以隱藏您的網站上的劇透。
          • jquery.vibrate.js - Vibration API Wrappers
          • list.js - 為表,列表和各種HTML元素添加搜索,排序,過濾器和靈活性。構建為不可見并處理現有HTML。 http://www.listjs.com
          • mixitup - MixItUp - 過濾和排序插件。
          • grid - 拖放庫,用于二維,可調整大小和響應式列表。
          • jquery-match-height - jQuery的響應性相等高度插件。
          • survey.js - JavaScript Survey Engine。它使用JSON進行調查元數據和結果。
          • Array Explorer和Object Explorer - 幫助確定在任何給定時間最適合使用本機JavaScript方法的資源
          • Clipboard.js - “復制到剪貼板”沒有Flash或使用框架。
          • ky - 基于瀏覽器Fetch API的簡潔優雅的HTTP客戶端。

          播客

          • JavaScript Air - 所有關于JavaScript和Web平臺的實時視頻廣播播客。
          • Web of Tomorrow - 為初學者播放有關JavaScript的播客。
          • JavaScript Jabber - 關于JavaScript的每周播客,包括Node.js,前端技術,職業,團隊等。

          值得一讀

          你不懂JS - 可能是用現代JavaScript編寫的最好的書,完全可以免費在線閱讀,或者可以買來支持作者。

          • braziljs / js-the-right-way - 一個易于閱讀的快速參考,用于JS最佳實踐,可接受的編碼標準以及Web上的鏈接。
          • JSbooks - 免費JavaScript電子書目錄。
          • Superhero.js - 有關創建,測試和維護大型JavaScript代碼庫的資源集合。
          • SJSJ - 簡化的JavaScript術語是一個社區驅動的嘗試,用一些簡單的詞語解釋當前JavaScript生態系統的流行語。
          • 如何編寫開源JavaScript庫 - 通過一系列步驟發布JavaScript開源庫的綜合指南。
          • Jaavascript教程 - 通過各種用戶排名的在線教程在線學習Javascript。

          原文:https://github.com/sorrycc/awesome-javascript

          本文:https://pub.intelligentx.net/collection-awesome-browser-side-javascript-libraries-resources-and-shiny-things

          討論:請加入知識星球或者小紅圈【首席架構師圈】

          一節增加推薦圖書的提交和刪除功能,來學習node的form提交以及node的圖片上傳功能。開始之前需要源碼同學可以先在git上fork:https://github.com/stoneniqiu/ReadingClub

          一、form驗證

          MVC的form驗證有三個地方可以做,第一道關就是前端提交之前,第二道關就是在數據保存之前,也就是在controller中做驗證,第三道關就是數據保存的時候,也就是如果提交的數據模型不符合實體定義的約束,數據是無法保存的,這是最后一道防線。第一道關主要是依賴于js或者jquery框架,比較常用的是jquery.validate.js。如果是Asp.net MVC 可以自動生成驗證規則,這里就不細究了,網上有很多文章。第二層和各自的業務邏輯有關,也需要做一些必要驗證,防止前端禁止JavaScript,而提交不合法數據,這里是要講基于Mongoose的第三層驗證。

          1.回顧模型定義

          我們先回顧一下之前用Mongoose定義的book模型:

          var bookSchema=new mongoose.Schema({
              title: { type: String, required: true },
              rating: {
                  type: Number,
                  required: true,
                  min: 0,
                  max: 5
              },
              info: { type: String, required: true },
              img: String,
              tags: [String],
              brief: { type: String, required: true },
              ISBN: String,
          });

          每個屬性定義了類型和是否必須,還可以添加min,max,默認值等其他約束。如果提交的模型不滿足這些約束,將不能保存成功。相當于Asp.net MVC中的DataAnnotations的作用。后面的form驗證就基于此。

          2.添加路由

          我們需要增加4個路由規則,2個用于添加(一個get,一個post),一個用于刪除,一個用于上傳圖片:

          router.get('/book/create', homeController.bookcreateview);
          router.post('/book/create', homeController.doBookCreate);
          router.delete('/book/:id', homeController.delete);
          router.post('/uploadImg', homeController.uploadImg);

          基于Express的路由,我們可以創建Restful的路由規則。路由位于app_server文件夾下。

          3.添加控制器方法

          home.bookcreateview:

          module.exports.bookcreateview=function (req, res) {
              res.render('bookCreate', { title: '新增推薦圖書' });
          };

          這里直接是一個get請求,所以直接用render去渲染視圖,當然這個bookCreate視圖接下來會創建。

          doBookCreate:

          module.exports.doBookCreate=function (req, res) {
              var requestOptions, path, postdata;
              path="/api/book";
              postdata={
                  title: req.body.title,
                  info: req.body.info,
                  ISBN: req.body.ISBN,
                  brief: req.body.brief,
                  tags: req.body.tags,
                  img: req.body.img,
                  rating:req.body.rating,
              };
              requestOptions={
                  url: apiOptions.server + path,
                  method: "POST",
                  json: postdata,
              };
              request(requestOptions, function (err, response, body) {
                  console.log("body.name", body.name, response.statusCode);
                  if (response.statusCode===201) {
           res.redirect("/detail/"+body._id);
                  } 
                  else if (response.statusCode==400 && body.name && body.name=="ValidationError") {
           res.render('bookCreate', { title: '新增推薦圖書', error:"val"});
                  }
                  else {
           console.log("body.name",body.name);
           info(res, response.statusCode);
                  }
              });
          };

          info:

          function info (res, status) {
              var title, content;
              if (status===404) {
                  title="404, 頁面沒有找到";
                  content="親,頁面飛走了...";
              } else if (status===500) {
                  title="500, 內部錯誤";
                  content="尷尬...,發生錯誤";
              } else {
                  title=status + ", 有什么不對勁";
                  content="某些地方可能有些錯誤";
              }
              res.status(status);
              res.render('info', {
                  title : title,
                  content : content,
                  status: status,
              });
          };

          View Code

          在上一節,我們創建了數據操作的api部分。代碼的流程就是先從req中獲取到前端傳過來的數據,然后用request模塊調用api,如果添加成功(狀態碼是201)就返回到detail頁面,如果驗證失敗,就原路返回,并給出提示。如果錯誤,交給info方法去處理。

          delete:

          module.exports.delete=function (req, res) {
              var requestOptions, path;
              path="/api/book/" + req.params.id;
              requestOptions={
                  url: apiOptions.server + path,
                  method: "delete",
                  json: {},
              };
              request(requestOptions, function (err, response, body) {
                  if (response.statusCode==204) {
           res.json(1);
                  } 
                  else {
           res.json(0);
                  }
              });
          };

          如果刪除成功,返回的狀態碼是204,然后返回json(1)讓前端去處理界面。

          4.添加視圖

          1) 先需要在圖書列表的右側邊欄增加一個按鈕:

          在books視圖中修改:

             .col-md-3
               .userinfo
                 p stoneniqiu
                 a(href='/book/create').btn.btn-info 新增推薦

          當用戶點擊會跳轉到/book/create頁面

          2)新增推薦頁面:

          extends layout
          include _includes/rating
          
          block content
            .row
             .col-md-12.page.bookdetail
                h3 新增推薦書籍  
                .row
                  .col-xs-12.col-md-6
                   form.form-horizontal(action='',method="post",role="form")
           - if (error=="val")
           .alert.alert-danger(role="alert") All fields required, please try again
           .form-group
           label.control-label(for='title') 書名
           input#name.form-control(name='title')
           .form-group
           label.control-label(for='info') 信息
           input#name.form-control(name='info') 
           .form-group
           label.control-label(for='ISBN') ISBN
           input#name.form-control(name='ISBN')
           .form-group
           label.control-label(for='brief') 簡介
           input#name.form-control(name='brief')
           .form-group
           label.control-label(for='tags') 標簽
           input#name.form-control(name='tags')
           .form-group
           label.control-label(for='rating') 推薦指數
           select#rating.form-control.input-sm(name="rating")
           option 5
           option 4
           option 3
           option 2
           option 1
           .form-group
           p 上傳圖片
           a.btn.btn-info(id="upload", name="upload") 上傳圖片
           br
           img(id='img')
           .form-group
           button.btn.btn-primary(type='submit') 提交
              

          if語句的地方是用來顯示錯誤提示;圖片上傳,稍后完整介紹;所以提交頁面基本長成這樣:

          3)Mongoose驗證

          這個時候沒有加前端驗證,form可以直接提交。但是node打印出了錯誤日志,Book validation failed,驗證失敗。

          這是Mongoose給我們返回的驗證信息,這時界面上回顯示一個提示信息:

          這是因為在controller中的處理:

            else if (response.statusCode==400 && body.name && body.name=="ValidationError") {
           res.render('bookCreate', { title: '新增推薦圖書', error:"val"});
                  }

          以上說明了Mongoose會在數據保存的時候驗證實體,如果實體不滿足path規則,將不能保存。但至此有三個問題,第一個問題是提示信息不明確,當然我們可以遍歷輸出ValidatorError;第二個就是,驗證錯誤之后,頁面原來的數據沒有了,需要再輸入一遍,這個我們可以參考Asp.net MVC將模型數據填充到視圖中可以解決;第三個問題就是頁面前端還沒有驗證,form直接就可以提交了,這個可以通過簡單的Jquery腳本就可以做到;這三點先不細究。繼續往下看,如果規范輸入,這個時候是可以提交的,提交之后在books頁面可以看到:

          4)刪除

          在標題的右側增加了一個刪除符號(books視圖中):

                   .col-md-10
           p
           a(href="/Detail/#{book._id}")=book.title
           span.close(data-id='#{book._id}') &times;

          并添加腳本:

          $(".close").click(function {
              if (confirm("確定刪除?")) {
                  var id=$(this).data("id");
                  var row=$(this).parents(".booklist");
                  $.ajax({
           url: "/book/" + id,
           method: "delete",
                  }).done(function(data) {
           console.log(data);
           row.fadeOut;
                  });
              }
          });

          腳本可以先位于layout視圖下方:

            script(src='/javascripts/books.js')

          這樣,刪除完成之后會隱藏當前行。下面解決圖片上傳問題。

          二、圖片上傳

          前面我們在路由里面定義了一個uploadimg方法,現在實現它。一般都涉及兩個部分,一個是前臺圖片的提交,一個是后端數據的處理。

          1.uploadimg 方法實現

          先需要安裝formidable模塊。

          然后在Public文件下創建一個upload/temp文件夾

          腳本:

          var fs=require('fs');
          var formidable=require('formidable');
          module.exports.uploadImg=function (req, res) {
            var form=new formidable.IncomingForm;   //創建上傳表單
                form.encoding='utf-8';        //設置編輯
                form.uploadDir='./../public/upload/temp/';     //設置上傳目錄
                form.keepExtensions=true;     //保留后綴
                form.maxFieldsSize=3 * 1024 * 1024;   //文件大小
          
              form.parse(req, function(err, fields, files) {
                  console.log(files);
                  if (err) {
           console.log(err);
           return res.json(0);        
                  }
                  for (var key in files) {
           console.log(files[key].path);
           var extName=''; //后綴名
           switch (key.type) {
           case 'image/pjpeg':
           extName='jpg';
           break;
           case 'image/jpeg':
           extName='jpg';
           break;
           case 'image/png':
           case 'image/x-png':
           default:
           extName='png';
           break;
           }
           var avatarName=(new Date).getTime + '.' + extName;
           var newPath=form.uploadDir + avatarName;
           
            fs.renameSync(files[key].path, newPath); //重命名
           return res.json("/upload/temp/"+ avatarName);
                  }
              });
           
          };

          這個form會自動將文件保存到upLoadDir目錄,并以upload_xxxx格式重新命名,所以最后使用fs模塊對文件進行重命名。然后返回給前端。

          2.前端

          我喜歡用插件,前端我用的是plupload-2.1.8,擁有多種上傳方式,比較方便。放置在Public文件下。在layout.jade中引用js:

             script(src='/plupload-2.1.8/js/plupload.full.min.js')
             script(src='/javascripts/books.js')

          而在bookCreate.jade視圖中,修改如下:

           a.btn.btn-info(id="upload", name="upload") 上傳圖片
           br
           img(id='img')
           input#imgvalue(type='hidden',name='img',value='')

          a標簽用來觸發上傳,img用來預覽,input用來存放路徑。在books.js下增加以下代碼:

          var uploader=new plupload.Uploader({
              runtimes: 'html5,flash,silverlight,html4',
              browse_button: "upload",
              url: '/uploadImg',
              flash_swf_url: '/plupload-2.1.8/js/Moxie.swf',
              silverlight_xap_url: '/plupload-2.1.8/js/Moxie.xap',
              filters: {
                  max_file_size: "3mb",
           mime_types: [
           { title: "Image files", extensions: "jpg,gif,png" },
           { title: "Zip files", extensions: "zip" }
           ]
              },
              init: {
                  PostInit: function  {
                  },
                  FilesAdded: function (up, files) {
           plupload.each(files, function (file) {
           uploader.start;
           });
                  },
                  UploadProgress: function (up, file) {
                  },
                  Error: function (up, err) {
                  }
              }
          });
          uploader.init;
          uploader.bind('FileUploaded', function (upldr, file, object) {
              var data=JSON.parse(object.response);
              console.log(data);
              $("#img").attr("src", data);
              $("#imgvalue").val(data);
          });

          提交:

          上傳成功后跳轉到detail頁面。

          至此,圍繞form的提交這一節學習了Mongoose的數據驗證,以及使用plupload上傳,以及后端用formidable和fs模塊處理圖片。相對于Asp.net MVC而言,Asp.net MVC因為有自動化的form相對快捷一些。下一節將介紹Angular,作為MEAN中的A,該出場了。


          主站蜘蛛池模板: 亚洲AV福利天堂一区二区三| 末成年女A∨片一区二区| 国产一区二区三区在线观看免费| 日本一区二区三区在线观看| 亚洲中文字幕无码一区二区三区 | 精品国产一区二区三区在线观看| 国产精品视频分类一区| 亚洲一区二区三区夜色| 麻豆精品一区二区综合av| 国产AV天堂无码一区二区三区 | 精品一区二区三区在线播放| 国产成人av一区二区三区在线观看 | 亚州AV综合色区无码一区| 色综合视频一区二区三区| 文中字幕一区二区三区视频播放 | 日韩av无码一区二区三区| 亚洲熟妇AV一区二区三区浪潮| 精品乱码一区二区三区在线| 国产探花在线精品一区二区| 亚洲精品色播一区二区| 亚洲熟妇av一区二区三区漫画| 一本大道在线无码一区| 无码人妻精品一区二区三区在线| 国产一区二区精品在线观看| 精品女同一区二区三区免费站 | a级午夜毛片免费一区二区| 国产微拍精品一区二区| 亚洲一区二区三区四区视频 | 亚洲一区二区三区深夜天堂| 日韩精品一区二区三区不卡| 午夜福利无码一区二区| 激情内射亚洲一区二区三区| 中文字幕一区二区免费| 一区二区高清在线观看| 国产一区二区在线| 好爽毛片一区二区三区四无码三飞 | 精品永久久福利一区二区| 国产无线乱码一区二三区| 波多野结衣的AV一区二区三区| 日韩高清一区二区三区不卡 | 亚洲AⅤ视频一区二区三区|