1. 程式人生 > >HTA程式:VBS/JS指令碼GUI

HTA程式:VBS/JS指令碼GUI

  1 <Html>
  2 <Head>
  3 <Title>HTA Test</Title>
  4 <HTA:APPLICATION 
  5   applicationName="HTA_Test"
  6   border="Dialog"
  7   borderStyle="Raized"
  8   caption="Yes"
  9   contextMenu="No"
 10   icon="E:\文件\圖示\Ico圖示大全\Icon資源大全\chemical.ico"
 11   id="Test"
 12   innerBoder="Yes"
 13
navigable="Yes" 14 maximizeButton="No" 15 minimizeButton="No" 16 scroll="No" 17 scrollFlat="Yes" 18 selection="Yes" 19 showInTaskbar="Yes" 20 singleInstance="No" 21 sysMenu="Yes" 22 version="1.0" 23 windowState="Normal" /> 24 </Head> 25 <script language="VBScript"> 26
Function GetCmdArgs(cmdArgs) 27 '本函式解析命令列引數 28 '1.左引號前面必須是空格,否則引號應視作引數內容,而非邊界 29 '2.右引號後面必須是空格,否則引號應視作引數內容,而非邊界 30 '3.最後面的那個引數,如果引號邊界沒有配對,即無右引號,那麼 31 ' 最後的那個引數的左引號當重新認定為內容,而非邊界 32 '4.多個空格間隔兩個引數,防止後面的空格間隔符被歸入內容中 33 '5.防止命令列引數最後有多個無意義空格的情況 34 Dim args(),isComplete,c,args2,i,index 35 isComplete=True
36 ReDim args(0) 37 For i=1 To Len(cmdArgs) 38 c=Mid(cmdargs,i,1) 39 If c=Chr(34) Then 40 If isComplete Then 41 If i=1 Then 42 isComplete=Not isComplete 43 Else 44 If Mid(cmdArgs,i-1,1)=" " Then 45 isComplete=Not isComplete 46 Else 47 args(UBound(args))=args(UBound(args))+c 48 End If 49 End If 50 Else 51 If i=Len(cmdArgs) Then 52 isComplete=Not isComplete 53 Else 54 If Mid(cmdArgs,i+1,1)=" " Then 55 isComplete=Not isComplete 56 Else 57 args(UBound(args))=args(UBound(args))+c 58 End If 59 End If 60 End If 61 Else 62 If c=" " And isComplete=True Then 63 If args(UBound(args))<>"" Then 64 ReDim Preserve args(UBound(args)+1) 65 End If 66 Else 67 args(UBound(args))=args(UBound(args))+c 68 End if 69 End If 70 Next 71 If isComplete=False Then 72 args(UBound(args))=Chr(34)+args(UBound(args)) 73 If InStr(args(UBound(args))," ")<>0 Then 74 args2=Split(args(UBound(args))) 75 index=UBound(args) 76 ReDim Preserve args(UBound(args2)+index) 77 For i=index To UBound(args2)+index 78 args(i)=args2(i-index) 79 Next 80 End If 81 End If 82 If args(UBound(args))="" Then 83 ReDim Preserve args(UBound(args)-1) 84 End If 85 GetCmdArgs=args 86 End Function 87 </script> 88 <Script language="JavaScript"> 89 //===================================================== 90 //HTA是HTML Application的縮寫(HTML應用程式),直接將HTML 91 //儲存成HTA的格式,就成了一個獨立的應用軟體,也可以嵌入 92 //<HTA:APPLICATION>元素來增強對該應用程式的控制 93 //===================================================== 94 //以下是<HTA:APPLICATION>元素可用屬性,可用來設定HTA視窗 95 //的各種細節【記住HTA:APPLICATION這個APPLICATION不可少, 96 //且這裡必須全大寫,否則以下屬性無效】 97 //【1】applicationName:string=>設定HTA程式的名稱,在singleInstance 98 // 屬性設定為"Yes"時有用 99 //【2】border:enum=>設定HTA視窗的邊框型別,預設值Thick 100 // 所有允許的值: Thick 粗邊框 101 // Dialog 對話方塊【大小不可調整】 102 // None 無邊框【無標題欄】 103 // Thin 窄邊框 104 //【3】borderSytle:enum=>設定HTA視窗的邊框風格,預設值是Normal 105 // 所有允許的值: Normal 普通 106 // Complex 凹凸格式組合邊框 107 // Raised 凸出的3D邊框 108 // Static 3D邊框格式 109 // Sunken 凹進的3D邊框 110 //【4】caption:Yes/No=>設定HTA視窗是否顯示標題欄,預設值為Yes 111 //【5】commandLine:string=>此屬性儲存了HTA程式的啟動引數【無法通過 112 // 在<HTA:APPLICATION>元素中設定來定義,是受呼叫傳遞的引數控制的】, 113 // 引數可以在Script塊中通過<Id>.commandLine來引用,如本程式則是 114 // Test.commandLine。它的各個引數之間以空格分隔;包含空格的引數請 115 // 在呼叫時,用引號引起來,否則會被當成多個引數;第一個引數總是HTA 116 // 程式的檔案路徑;其引數需要自己手動解析;因為這個屬性的存在,你可 117 // 以方便地使用js/vbs總呼叫各種HTA介面,而後通過window.onunload來記錄 118 // 下結果,以方便總調程式獲取HTA互動結果 119 //【6】contextMenu:Yes/No=>是否顯示右鍵上下文選單,預設值Yes 120 //【7】icon:stirng=>設定應用程式的圖示檔案路徑,須是有效的ico圖示文 121 // 件,如icon="c:\\a.ico" 122 //【8】innerBorder:Yes/No=>是否顯示內部邊框的3D邊界,預設值Yes 123 //【9】navigable:Yes/No=>是否在本視窗載入新navigate(url)的連結,當 124 // navigable=Yes時,window.navigate(url)方法載入的頁面將在本HTA視窗 125 // 中載入,而不是新的瀏覽器頁面 126 //【10】maximizeButton:Yes/No=>是否顯示最大化按鈕,預設值Yes 127 //【11】minimizeButton:Yes/No=>是否顯示最小化按鈕,預設值Yes 128 //【12】scroll:Yes/No=>是否在頁面右側顯示垂直滾動條,預設值是Yes 129 //【13】scrollFlat:Yes/No=>設定滾動條是3D(No)或者平面的(Yes) 130 //【14】selection:Yes/No=>設定內容是否可以被滑鼠或鍵盤選中 131 //【15】showInTaskbar:Yes/No=>是否在工作列顯示任務圖示,預設值Yes 132 //【16】singleInstance:Yes/No=>是否同時只允許有一個執行例項【程序】, 133 // 預設值No。當第二次啟動同一個HTA程式時, mshta.exe通過上面 134 // applicaitonName來區分是否名稱已佔用 135 //【17】sysMenu:Yes/No=>是否允許顯示標題欄右鍵選單,預設值是Yes 136 //【18】version:string=>設定應用程式的版本,如"1.0",預設值為"" 137 //【19】windowState:enum=>設定HTA視窗的顯示型別,預設值為Normal 138 // 所有允許的值: Normal 常規 139 // Minimize 最小化 140 // Maximize 最大化 141 //===================================================== 142 //參見Microsoft HTML Object Library庫 143 //1.以下事件是可以正常發生的: 144 //window.onafterprint 此事件在HTA視窗的列印工作完成之後發生 145 //window.onbeforeprint 此事件在HTA視窗的列印工作開始之前發生 146 //window.onbeforeunload 此事件在HTA視窗被銷燬前發生 147 //window.onblur 此事件在將鍵盤焦點從HTA視窗移開時發生 148 //window.onerror 此事件在HTA程式出現錯誤時發生 149 //window.onfocus 此事件在HTA視窗獲得焦點時發生 150 //window.onhelp 此事件在HTA視窗有焦點時按下F1幫助鍵時發生 151 //window.onload 此事件在HTA視窗被成功載入後發生 152 //window.onresize 此事件在HTA視窗的大小改變時發生 153 //window.onscroll 此事件在對HTA視窗執行滾動操作時發生 154 //window.onunload 此事件在HTA視窗被銷燬時發生,切記此時alert不再可用 155 //2.可以通過IHTMLWindow2介面定義的其它方法屬性來操縱HTA程式 156 // 的視窗。 157 //3.HTA中仍然可以使用Scripting.FileSystemObject物件來對檔案 158 // 系統進行讀寫操作,可利用Window_OnUnload事件來收集HTA表單 159 // 的資料,記錄為文字,方便常規的VBS指令碼程式通過GUI介面來進 160 // 行互動,提升互動體驗與使用的方便性。 161 //4.HTA中指令碼宿主物件WScript/WshArguments/WshNamed/WshUnnamed 162 // 物件是無法使用的,其它的如WshShell/WshEnvironment/ 163 // WshShortcut/WshSpecialFolders/WshUrlShortcut/WshNetwork 164 // 物件等依然可用 165 //----------------------------------------------------- 166 //HTA視窗的列印控制事件 167 // window.onafterprint=function() 168 // { 169 // 此事件在HTA視窗的列印工作完成之後發生 170 // alert("OnAfterPrint"); 171 // } 172 // window.onbeforeprint=function() 173 // { 174 // 此事件在HTA視窗的列印工作開始之前發生 175 // alert("OnBeforePrint"); 176 // } 177 //----------------------------------------------------- 178 // window.onblur=function() 179 // { 180 // 此事件在將鍵盤焦點從HTA視窗移開時發生 181 // alert("OnBlur"); 182 // } 183 // window.onerror=function() 184 // { 185 // 此事件在HTA程式出現錯誤時發生 186 // alert("OnError"); 187 // } 188 // window.onfocus=function() 189 // { 190 // 此事件在HTA視窗獲得焦點時發生 191 // alert("OnFocus"); 192 // } 193 // window.onhelp=function() 194 // { 195 // 此事件在HTA視窗有焦點時按下F1幫助鍵時發生 196 // alert("OnHelp"); 197 // } 198 //----------------------------------------------------- 199 //HTA視窗的載入與銷燬事件 200 var es,values; 201 var ws=new ActiveXObject("WScript.Shell"); 202 var fso=new ActiveXObject("Scripting.FileSystemObject"); 203 204 function GetCmdArgs(cmdArgs) 205 { 206 //本函式解析命令列引數 207 //1.左引號前面必須是空格,否則引號應視作引數內容,而非邊界 208 //2.右引號後面必須是空格,否則引號應視作引數內容,而非邊界 209 //3.最後面的那個引數,如果引號邊界沒有配對,即無右引號,那麼 210 // 最後的那個引數的左引號當重新認定為內容,而非邊界 211 //4.多個空格間隔兩個引數,防止後面的空格間隔符被歸入內容中 212 //5.防止命令列引數最後有多個無意義空格的情況 213 var args=new Array(''),isComplete=true; 214 for(var i=0;i<cmdArgs.length;i++) 215 { 216 var c=cmdArgs.charAt(i); 217 if(c=='"') 218 if(isComplete) 219 if(i==0) 220 isComplete=!isComplete; 221 else 222 if(cmdArgs.charAt(i-1)==" ") 223 isComplete=!isComplete; 224 else 225 args[args.length-1]+=c; 226 else 227 if(i==cmdArgs.length-1) 228 isComplete=!isComplete; 229 else 230 if(cmdArgs.charAt(i+1)==" ") 231 isComplete=!isComplete; 232 else 233 args[args.length-1]+=c; 234 235 else 236 if(c==" "&&isComplete&&args[args.length-1]!="") 237 args.push(''); 238 else 239 args[args.length-1]+=c; 240 } 241 if(!isComplete) 242 { 243 var arg='"'+args.pop(); 244 if(arg.indexOf(" ")!=-1) 245 args=args.concat(arg.split(" ")); 246 } 247 if(args[args.length-1]=="") 248 args.pop(); 249 return args 250 } 251 252 function isGoodVarName(name){ 253 var arr=name.match(/^[a-zA-Z_][a-zA-Z_0-9]*$/g); 254 if(arr!=null&&arr.length==1) 255 return true; 256 else 257 return false; 258 } 259 260 function isNumberStr(numStr){ 261 try{num=eval('new Number('+numStr+')');} 262 catch(e){return false;} 263 return true; 264 } 265 266 function center_clicked(){ 267 var e=self.document.getElementById('left'); 268 e.disabled=!e.disabled; 269 var e=self.document.getElementById('top'); 270 e.disabled=!e.disabled; 271 } 272 273 function getHta(){ 274 var xml=new ActiveXObject("MSXML2.DOMDocument"); 275 var eHta=xml.createElement('HTA:APPLICATION'); 276 var names=('applicationName;border;borderStyle;caption;contextMenu;'+ 277 'icon;id;innerBorder;navigable;maximizeButton;minimizeButton;'+ 278 'scroll;scrollFlat;selection;showInTaskbar;singleInstance;'+ 279 'sysMenu;version;windowState').split(";"); 280 for(var i=0;i<names.length;i++) 281 eHta.setAttribute(names[i],values.Item(names[i])); 282 var htaSettingsStr=eHta.xml; 283 htaSettingsStr=htaSettingsStr.replace(/(\") (\w)/ig,'$1\r\n $2'); 284 htaSettingsStr=htaSettingsStr.replace(/(\w) (\w+=\")/ig,'$1\r\n $2'); 285 return htaSettingsStr; 286 } 287 288 function btnOk_clicked(){ 289 es=new Elements(); 290 values=new ActiveXObject("Scripting.Dictionary"); 291 //get all values 292 for(var i in es) 293 if(i!='getValue') 294 values.Add(i,es.getValue(es[i])); 295 //check values 296 //check 'id' 297 var value=values.Item('id'); 298 if(values.Item('commandLine')=='Yes'&&value==''&&!isGoodVarName(value)){ 299 alert('The value of "id" must be a good varname when the commandLine is required!!!'); 300 return; 301 } 302 //check 'left','top','width','height' 303 var names=new Array('left','top','width','height'); 304 for(var i=0;i<names.length;i++){ 305 var name=names[i]; 306 if(values.Item('center')=='Yes') 307 if(name=='left'||name=='top') 308 continue; 309 value=values.Item(name); 310 if(isNumberStr(value)){ 311 values.Item(name)=eval('new Number('+value+')'); 312 value=values.Item(name); 313 var maxValue=eval('self.window.screen.'+name); 314 if(value>maxValue||value<0){ 315 alert("The value of '"+name+"' must be 0-"+maxValue); 316 return; 317 } 318 } 319 else{ 320 alert("The value of '"+name+"' is not a number string."); 321 return; 322 } 323 } 324 //htaPath 325 var htaPath; 326 do{ 327 htaPath=fso.GetAbsolutePathName(fso.GetBaseName(fso.GetTempName())+'.hta'); 328 }while(fso.FileExists(htaPath)); 329 //start to write the hta file 330 var txt=fso.CreateTextFile(htaPath); 331 txt.WriteLine('<html>\r\n<head>\r\n<title>'+values.Item('title')+'</title>'); 332 txt.WriteLine(getHta()); 333 txt.WriteLine('<script language="'+values.Item('language')+'">'); 334 if(values.Item('language')=='JavaScript'){ 335 if(values.Item('commandLine')=='Yes'){ 336 txt.WriteLine(GetCmdArgs); 337 txt.WriteLine(''); 338 } 339 340 if(values.Item('center')=='Yes'){ 341 var width=values.Item('width'),height=values.Item('height'); 342 if(width!=0&&height!=0){ 343 txt.WriteLine('\r\nself.resizeTo('+width+','+height+');'); 344 txt.WriteLine('self.moveTo((self.screen.width-'+width+ 345 ')/2,(self.screen.height-'+height+')/2);\r\n'); 346 } 347 } 348 else{ 349 var left=values.Item('left'),top=values.Item('top'); 350 var width=values.Item('width'),height=values.Item('height'); 351 if(left!=0&&top!=0&&width!=0&&height!=0){ 352 txt.WriteLine('\r\nself.resizeTo('+width+','+height+');'); 353 txt.WriteLine('self.moveTo('+left+','+top+');\r\n'); 354 } 355 } 356 for(var e=new Enumerator(values);!e.atEnd();e.moveNext()){ 357 name=e.item(); 358 if(name.indexOf('window')==0&&values.Item(name)=='Yes'){ 359 name=name.replace('_','.'); 360 txt.WriteLine(name+'=function(){\r\n \r\n}\r\n'); 361 } 362 } 363 } 364 else{ 365 if(values.Item('commandLine')=='Yes'){ 366 var stream=fso.OpenTextFile(GetCmdArgs(Test.commandLine)[0]); 367 for(var i=1;i<=86;i++) 368 if(i<=25) 369 stream.SkipLine(); 370 else 371 txt.WriteLine(stream.ReadLine()); 372 stream.Close(); 373 txt.WriteLine(''); 374 } 375 if(values.Item('center')=='Yes'){ 376 var width=values.Item('width'),height=values.Item('height'); 377 if(width!=0&&height!=0){ 378 txt.WriteLine('\r\nself.resizeTo '+width+','+height); 379 txt.WriteLine('self.moveTo (self.screen.width-'+width+ 380 ')/2,(self.screen.height-'+height+')/2\r\n'); 381 } 382 } 383 else{ 384 var left=values.Item('left'),top=values.Item('top'); 385 var width=values.Item('width'),height=values.Item('height'); 386 if(left!=0&&top!=0&&width!=0&&height!=0){ 387 txt.WriteLine('\r\nself.resizeTo '+width+','+height); 388 txt.WriteLine('self.moveTo '+left+','+top); 389 txt.WriteLine(''); 390 } 391 } 392 for(var e=new Enumerator(values);!e.atEnd();e.moveNext()){ 393 name=e.item(); 394 if(name.indexOf('window')==0&&values.Item(name)=='Yes'){ 395 txt.WriteLine('Sub '+name+'\r\n \r\nEnd Sub\r\n'); 396 } 397 } 398 } 399 txt.WriteLine('<\/script>'); 400 txt.WriteLine('</head>\r\n<body>\r\n</body>\r\n</html>'); 401 txt.Close(); 402 self.close(); 403 } 404 405 function btnCancel_clicked(){ 406 var btn=ws.Popup("The settings will be gave up, a"+ 407 "re you sure?",0,"Warnning",4+32); 408 if(btn==6) 409 self.close(); 410 } 411 412 function Elements(){ 413 this.getValue=function(e){ 414 switch(e.type){ 415 case "checkbox": 416 return e.checked?'Yes':'No'; 417 case "text": 418 case "file": 419 return e.value; 420 case "select-one": 421 case "select-multiple": 422 index=e.selectedIndex 423 return e.options[index].text; 424 default: 425 throw new Error(5001,"The element '"+e.id+"' is not the right type."); 426 } 427 } 428 for(var i=0;i<self.document.all.length;i++){ 429 var el=self.document.all[i]; 430 if(el.id!=''&&typeof el.type!='undefined'&&el.type!='button') 431 eval('this.'+el.id+'=el'); 432 } 433 } 434 window.onload=function() 435 { 436 //此事件在HTA視窗被成功載入後發生 437 var width=800,height=685; 438 self.resizeTo(width,height); 439 self.moveTo((self.screen.availWidth-width)/2, 440 (self.screen.availHeight-height)/2); 441 alert("OnLoad"); 442 //讓我們來看看本程式接收到哪些命令列引數 443 //你可以命令列執行HTATest.hta "hello world" 32 444 alert("Test.CommandLine: "+Test.commandLine); 445 alert("ApplicationName = "+Test.applicationName); 446 //

相關推薦

HTA程式VBS/JS指令碼GUI

1 <Html> 2 <Head> 3 <Title>HTA Test</Title> 4 <HTA:APPLICATION 5 applicationName="HTA_Test" 6 border="Dialog"

微信小程式無需JS,超簡單利用CSS3搭建跑馬燈

看過有利用JS定時器的,有利用微信小程式動畫API的,都比較複雜,須不知CSS3可以簡單的設定動畫效果咩,還是此方法so easy! .wxml檔案: <template name='raceLamp'> <view class='lamp_cont

solidity測試指令碼小心js裡坑爹的數值計算

前天在除錯solidity程式碼時,發現一個極為詭異的行為:solidity中存數的數值,當使用web3取出的時候,數值是錯的——與solidity中的值對不上! solidity中的程式碼大概是這樣的: mapping (uint => uint) public data;

微信小程式登陸獲取使用者資訊,包括維護3rdSession。(Node.js-Koa)

前兩三個月最常見的問題就是登陸模組的問題了。自己也改了好幾次登陸的問題,從普通登陸,一直改到維護3rdSession。(token) 普通登陸:使用者資料包括appid,secret全部暴露在外,相對來說不安全。 上前臺程式碼塊: wxml <button open-typ

程式例項js方法splict()、indexOf()、push()、replace()等運算元組Array的增刪改查

一、增加陣列子級  1、Array.push()  定義和用法  向陣列的末尾處新增一個或多個子集,並返回新陣列的長度  語法  var array=["好","紮在那個"]; array.push("fewa")//array=>[

在微信小程式JS指令碼中使用Promise來優化函式處理

在我們傳統的Javascript開發函式編寫中,我們習慣了回撥函式的處理,不過隨著回撥函式的增多,以及非同步處理的複雜性等原因,程式碼越來越難讀,因此誕生了使用Promise來優化JS函式處理的需求,引入Promise確實能夠很好的解決非同步回撥函式的可讀性等問題,同時也使得我們呼叫的時候程式碼簡潔一些,本文

File Uploader支援進度顯示與檔案拖拽的多檔案上傳前端JS指令碼

File Uploader的前身是Ajax Upload。按照官方的說法,升級到FileUploader主要是添加了一些新的特性,修正了一些比較嚴重的錯誤。但在我這個使用者看來,二者最大的不同在於:File Uploader不在基於jQuery。另外,File Upload

雜記(3)chrome擴充套件程式開發之在目標頁面執行JS指令碼

一、背景說明在雜記(2)中,我們寫了JS指令碼在chrome瀏覽器的開發者模式console頁面執行,用於搶bus票,但這個指令碼有個弊端是當頁面重新整理後,指令碼會自動清除,無法再執行,如何解決呢?我們可以開發一個chrome外掛,啟動這個外掛,當chrome瀏覽器一開啟目

js指令碼載入方式本地載入與cdn雲加速載入那個速度更快?

本地載入 CDN雲載入 (1) 只把hifhstock.js改為CDN載入: 結果:250ms大於151ms,cdn雲載入速度慢,比本地載入慢100多ms (2)只把jquery-3.2

請實現一個js指令碼,要求做到將數字轉化為千分位表示如10000 轉化為10,000

請實現一個js指令碼,要求做到將數字轉化為千分位表示 如: 10000  ---->   10,00010000121213   ---->   10,000,121,213 今天無意中看到這道題目,想了4種解決方案,和大家分享一下: //法一 functio

微信小程式js獲得兩層(多層)陣列最裡層的的length(舉個栗子,栗子重複的話,抱歉)

teacherList: [ { Tname: 'aaaaaa', Ttime: 'aaaaaaaaaaaaa', TtimeList: [ { Ltime: 'aaaaaaaaaaaaaaaaa',

微信小程式錯誤WAService.js 3 navigateTo fail url

剛開始接觸小程式,在做專案時會出現各種奇葩的問題,這裡每天記錄一點 錯誤: WAService.js:3 navigateTo:fail url “pages/location/location” 微信小程式頁面跳轉時,要跳轉的目標頁面需要在專案根目錄下

0510日重點原生js修改豆瓣電影api 在angularjs裏運用出現的bug

http ava move var cti tps 上下 console date 用$http.jsonp調用豆瓣電影api,會出現返回數據格式錯誤的bug。在控制器裏加上下面的代碼,才能正常獲取到數據。 function jsonp(url, ca

分針網——IT教育js原生寫黑客帝國特效

想必大家都看過 黑客帝國 系列電影吧!先放一張圖片致敬一下經典。我們就來做一下裏面的背景特效吧:The Matrix

分針網—每日分享Vue.js事件處理器與表單控件綁定

pan alt default efault mage add ref comm 功能 事件處理主要通過v-on這個指令來執行。 事件監聽及方法處理 1.簡單的可以直接內嵌在頁面。 2.可以通過將方法定義在methods中,然後再v-on中執行 3

node.js零基礎詳細教程(4)node.js事件機制、node異步IO操作

nod server nbsp node i++ 兩個 con 錯誤 定時器 第四章 建議學習時間3小時 課程共10章 學習方式:詳細閱讀,並手動實現相關代碼 學習目標:此教程將教會大家 安裝Node、搭建服務器、express、mysql、mongodb、編寫後臺業務邏

node.js零基礎詳細教程(7)node.js操作mongodb,及操作方法的封裝

font 裏的 ges 格式 上進 ins 方法 回調函數 方式 第七章 建議學習時間4小時 課程共10章 學習方式:詳細閱讀,並手動實現相關代碼 學習目標:此教程將教會大家 安裝Node、搭建服務器、express、mysql、mongodb、編寫後臺業務邏輯、編寫接口

flask前端優化css/js/html壓縮

flask sta ask 技術分享 all 時間 減少 ges 技術 1、先壓縮再傳輸,可以減少傳輸的大小,減少傳輸時間,但是壓縮需要時間,所以最終頁面顯示是快了還是慢了,需要比較 2、先看html壓縮模塊:pip install Flask-HTMLmin 壓縮前:大小

(轉)第05節Fabric.js的動畫設置

結束 左移 函數 制作 pan 三個參數 綁定 逆時針 包括 凡是出色的Canvas庫都少不了制作動畫的方法,Fabric.js也不例外,它有著編寫簡單且功能強大的動畫助手,這就是animate( )方法。 animate主要使用代碼如下: rect.animate(‘a

JavaScript入門006—JS函數的定義

括號 obj int() 對象 rip js函數 返回值 部分 hint JS函數的聲明。聲明函數的格式例如以下:function 函數名(參數列表){ //函數語句; return 返回值; }來看詳細的函數聲明。1、普通函數<script type=&qu