這是一款使用 CSS 制作的優雅漂亮的圓形時鐘,時鐘清爽簡潔,看起來非常舒服。
演示地址:
https://www.361zy.com/demo/334/
下載地址:
https://cloud.06dn.com/s/Jnoia
解壓碼:pWuLBIaF
Pad作為一個我們可以方便攜帶的便攜設備,有著比筆記本更靈活的使用場景。如果能用iPad來寫代碼的話,對于很多朋友來說相信都是一大好消息。下面推薦幾款能夠在iPad上編寫和運行python程序的app,當然也有介紹能夠運行多種語言的app,希望給想在iPad上編程的朋友帶來幫助。大家也可以推廣到其他編程語言,尋找合適的app!
本文會以在 iPad上寫python代碼為主,依次介紹carnets、pythonista和code app等幾款軟件,也會給大家介紹幾款提升iPad上寫代碼效率的工具。但是本文介紹的幾款app中,不止有python的編譯器,也有可以編譯運行多種不同語言的app,還會推廣涉及到遠程編譯的方法以實現多種不同語言的編譯運行,其中本人覺得最好用的code app放在最后講解,也是可以編譯和運行語言種類最多的app,一定要看到最后噢?。?/strong>
簡介
carnets是一款基于jupyter的python編譯器,在app store里面搜索carnets,會出現兩個版本,一個為carnets-jupyter,另一個為carnets-jupyter(with scipy),它們之間區別在于with scipy版本加入了scipy、sklearn、seaborn以及coremltools這幾個庫,對于需要用python從事科研的朋友很有用。此外,也支持安裝一些純python的第三方庫。
carnets-jupyter(with scipy)還支持notebook和jupyterlab的切換。但是缺點在于占用內存空間更大(1.6G,對比之下標準版本為1.1G)
具體使用介紹(以scipy版本為例)
首先打開app,點擊creat document,就會自動創建一個Untitled.ipynb文件并打開
可以看到,界面與電腦上的jupyter notebook是幾乎一樣的,操作方法也與電腦上的版本類似。
我們點擊左上角的文件,再點擊打開,就能來到文件管理界面
再點擊Nbextension,我們就能看到jupyter notebook的插件功能,和電腦上是完全一致的,把上面的勾選關掉,就可以使用插件功能了。
除此之外,在系統設置里面,可以更改語言設置,也可以更改文件儲存位置等,也可以在distribution里面把軟件界面設置成retrolab,點擊view再點擊open jupyterlab,我們就能打開jupyterlab的界面,在iPad上使用jupyterlab進行編程。
其余的使用與電腦端類似,可以參考電腦端jupyter的使用方法。
簡單測試
我們簡單跑一下代碼,以及嘗試裝一個純python的第三方庫
總結
總的來說,carnets很好解決了在iPad上使用python進行編程的問題,并且支持許多熱門的第三方庫,如numpy、matplotlib、pandas等,并且對于(with scipy)版本還支持scipy、sklearn等,在很大程度上能滿足python學習的需求,也能滿足一定的專業程序員的需求。
不足之處在于,notebook可能對于一部分人來說使用起來不習慣,以及受限于iPad OS,只能安裝一些純python的庫,一些深度學習的第三方庫可能安裝不了。
簡介
pythonista是一款python的IDE,界面較為特別,內置了numpy、matplotlib等熱門第三方庫。但是遺憾的是并不支持安裝第三方庫(好像有曲線救國的方法)。它有很多特色的小功能,比如內置了很多生動形象的小程序,對于初學者來說是很好的學習參考,對于已經掌握python的程序員來說也可以在此基礎上開發一些小程序。pythonista支持python ui的開發,能做一些很精美的程序。
具體使用介紹
打開app,點擊New file,點擊Empty script來創建一個新的python文件,把路徑設置在This iPad然后點擊create創建就可以。可以看到除了純python文件,也可以創建帶UI的python文件(這方面我不是很擅長,讀者可以自行嘗試)。
除此之外,點擊左上角可以查看文檔,再點擊返回可以查看全局文檔,進行文檔管理。
點擊This iPad下的example可以查看軟件自帶的一些小程序,點擊運行可以查看對應的功能,比如這個時鐘小程序
除此之外還有各種形式的程序,各位讀者可以自行查看
簡單測試
我們在pythonista上創建一個腳本,并運行一個簡單的例子
可以看出,運行結果是正確的。
總結
pythonista是一款比較專注于python,界面比較獨特的app。上面支持普通的python腳本文件,也支持python UI文件,并且提供了大量的例子,可供初學者學習,也增加了趣味性。
缺點是由于官方并不支持自行通過pip安裝第三方庫,使用起來只能局限于app自帶的庫,會有所不方便。app也已經有很長一段時間沒更新了,所以體驗可能稍差。
簡介
Code app是一款界面類似vscode的代碼編輯器,能夠支持5種語言的本地編譯以及40多種語言的在線編譯。運行界面和操作邏輯與vscode非常相似,內置了linux終端,支持近70種命令(ls、cd、nslookup等),并且支持快捷鍵自定義,對鼠標對支持也非常良好,功能十分強大。
具體使用介紹
打開app,可以看到與vscode類似的界面,我們可以創建新文件,也可以打開已有文件,也可以使用git clone來拷貝github上的項目。
我們點擊新文件,可以創建不同語言的文件,我們在這里創建一個python腳本文件
創建文件后,可以看到運行的是本地的python3.9.2。輸入幾行代碼,可以看到代碼高亮與電腦端vscode是類似的,但是在寫代碼過程中不支持代碼提示,這點比較遺憾
打開左下角的設置,可以更改主題或字體大小,也可以查看app支持的本地和遠程編譯的語言。
終端(terminal)可以按左邊的按鈕打開或者關閉,可以支持的命令有70多種,使用起來十分方便。使用pip命令也可以安裝純python第三方庫。
其他使用可以參考電腦端vscode的使用,感興趣的讀者可以下載使用一下。
簡單測試
我們運行上面的python代碼,運行正常
我們再測試一下別的語言,如C++,運行結果也正常。
其他語言以及在線編譯功能讀者可以自行嘗試。
總結
code app是一款功能非常強大的iPad代碼編輯器,支持多種語言的編譯功能,文件管理也非常完善,可以在一定程度上滿足專業程序員的需求。
美中不足的是code app不支持代碼提示,也不支持debug,期待后續更新可以加上這些功能。如果實現的話,應該算得上是iPad上最好用帶有本地編譯功能的編譯器了。
首先鍵盤肯定是要配一個的,要不然在屏幕上打字一來效率不高,二來屏幕大小就這么點,再被鍵盤占去一部分空間后寫代碼就會顯得很局促。
在這里我給大家推薦一款羅技的無線藍牙鍵盤,我自己本人也是羅技K380用戶,鍵盤的手感很不錯,質感也很好,最主要的是這款鍵盤方便攜帶,與iPad簡直是絕配!??!并且支持三臺不同設備之間的自由切換,可以同時配對你的iPad、電腦和手機,實現設備間辦公無縫銜接。K580也是不錯的選擇,提供了一個平板或者手機的支撐位,使用起來更方便,并且也能支持兩臺設備之間的切換。大家可以按需選擇。
除此之外,鼠標也可以配備一個,這樣可以獲得更加接近電腦上寫代碼的感覺,提升效率。大家也可以考慮一下羅技家的藍牙鼠標,非常輕薄便于攜帶,是隨時隨地在iPad上寫代碼的好幫手!
以上我們總結了幾款使用體驗非常不錯的python編譯器,以及code app這個能夠支持多種語言的編譯器:
除了上面提到的幾款app,其實iPad上也有不少其他好用的編譯器,比如pyto等。也有許多面向其他語言的編譯器,大家可以在app store上尋找。
但是由于iPad上只支持純python的第三方庫,有些專業程序員可能對其他第三方庫有需求,或者說想運行編譯其他更多語言,這個問題可以通過遠程編譯的方式來解決。如果我們有云服務器或者個人主機的話,可以通過在主機上配置code-server或者jupyter server的方式在iPad上實現遠程編譯,這個具體的教程就不在這展開了,感興趣的讀者可以搜索網上的教程,我后續可能也會寫一篇關于通過遠程服務器在iPad上寫程序的文章,歡迎大家關注!
以上有錯誤的地方也歡迎大家指正,互相交流!
anvas是HTML5新增的組件,它就像一塊幕布,可以用JavaScript在上面繪制各種圖表、動畫等。
沒有Canvas的年代,繪圖只能借助Flash插件實現,頁面不得不用JavaScript和Flash進行交互。有了Canvas,我們就再也不需要Flash了,直接使用JavaScript完成繪制。
在html源碼中只要像普通標簽那樣使用即可,比如下面的示例,但是在一些老舊的瀏覽器在中是不支持canvas的,因此我們常在canvas標簽中提示用戶,具體代碼如下所示。
<canvas id="myCanvas" width="300px" height="300px"> 您的瀏覽器不支持canvas,請嘗試更新瀏覽器 </canvas>
或者使用JS腳本來進行檢測,使用JavaScript代碼檢測是否支持canvas的代碼示例如下:
var myCanvas=document.getElementById('myCanvas'); if (myCanvas.getContext) { myCanvas.log('你的瀏覽器支持Canvas!'); } else { myCanvas.log('你的瀏覽器不支持Canvas!'); }
由于繪制canvas通常代碼需要比較多,我們常常使用引用js的方式來繪制canvas,這里我們也是引入js文件來操作canvas,HTML源碼如下所示
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>學習Canvas繪制始終效果</title> <style> canvas{ border: 1px solid #cccccc; } </style> </head> <body> <canvas id="myCanvas" width="300px" height="300px"> 您的瀏覽器不支持Canvas,請嘗試更新瀏覽器 </canvas> <script src="js/canvas.js"></script> </body> </html>
創建js文件
根據實際的需要創建js文件,這里我引入的地址是js/canvas.js,因此需要和HTML源碼文件同級下創建js文件夾,然后再js文件夾中創建canvas.js文件。
繪制測試示例
繪制效果如下
<div style="align: center"> <img src="http://www.zhoutao123.com:9000/upload/2017/12/4s4ptf692qhjtq6f1pdddj1l9b.png" width="200"> </div>
預備代碼
這里保持一些全局變量,方便后面使用的
//獲取canvas的上下文環境 var myCanvas=document.getElementById('myCanvas') var ctx=myCanvas.getContext('2d') //獲取canvas的寬度和高度 var canvasWidth=myCanvas.width var canvasHeight=myCanvas.height
身為前端老司機,還是得分享些干貨精品學習資料的,前端資料獲取方式:
關注后,手機客戶端點擊我的主頁面,右上角有私信,請私信回復:【學習】
已經設置好了關鍵詞自動回復,所以回復的時候請注意關鍵詞喲~
繪制背景
我們首先繪制背景,分析背景可以看到,他是由一個大的黑色與圓圈包裹,里面有一個灰色的略小的圓圈,在灰色圓圈的周圍均勻分布著時鐘點,這些時鐘點每逢5的倍數的時候突出顯示,否則就是灰色顯示,這就是我們的需求,具體注釋在代碼中可以詳細看到。
//開始繪制背景 function drawBackground() { //未防止當前畫布環境被破壞,因此我們保存當前的繪制環境 ctx.save() //開始繪制路徑 ctx.beginPath() //配置繪制顏色,我們首先繪制的是黑色圓圈,因此我們配置為黑色 ctx.strokeStyle='#000000' //繪制寬度為6個像素 ctx.lineWidth=6 //開始繪制圓,圓心未知是寬和高的一半,半徑是寬度的一半減去圓圈的寬度 //這里最后的兩個參數需要注意 //指的是繪制圓圈的起點和繪制的弧度 //我們從0點開始繪制然后繪制2*PI個弧度,也就是一個正圓 //這里的點是從x軸正方向開始的 ctx.arc(canvasWidth/2,canvasHeight/2,canvasHeight/2-3,0,2*Math.PI) //配置完成,開始繪制 ctx.stroke() //同樣的需求開始繪制灰色的圓圈 ctx.beginPath() ctx.strokeStyle='#CCCCCC' ctx.lineWidth=1 ctx.arc(canvasWidth/2,canvasHeight/2,(canvasWidth/2-15),0,2*Math.PI) ctx.stroke() //將原點從左上角0,0移動到中心位置 ctx.translate(canvasWidth/2,canvasHeight/2) //需要現實的數字 //這是可以看到,數字是從3開始的,也驗證了我們的之前說的繪制從x軸正方向開始 //在時鐘界面x軸正方向就是3點鐘 var colorNumber=[3,4,5,6,7,8,9,10,11,12,1,2] //配置字體和對齊方向 ctx.font="25px Arial"; ctx.textAlign="center" ctx.textBaseline="middle" //循環遍歷,開始繪制數字 for(var i=0;i<colorNumber.length;i++){ var dep=2 * Math.PI /12 * i; ctx.fillText(colorNumber[i],(canvasWidth/2-30) * Math.cos(dep),(canvasHeight/2-30)* Math.sin(dep)) } //繪制時鐘點 for(var i=0;i<60;i++){ var rad=2 * Math.PI /60 * i; var x=Math.cos(rad) * (canvasHeight/2-16) var y=Math.sin(rad) * (canvasHeight/2-16) ctx.beginPath(); //如果是5的倍數,使用黑色填充,否則使用灰色填充 if (i % 5===0){ ctx.fillStyle="#000" ctx.arc(x,y,2,0,2*Math.PI,false) }else{ ctx.fillStyle="#CCC" ctx.arc(x,y,2,0,2*Math.PI,false) } ctx.fill() } }
繪制時針
繪制時針、分針以及秒針的理念是先繪制0時刻的樣子,然后旋轉畫布一定的弧度,從而達到轉動的效果。
//繪制時針 function drawHours(hours,minte) { //保存環境 ctx.save() //計算時鐘角度和偏離的角度 var rad=2 * Math.PI / 12 * hours; var rad2=2 * Math.PI / 12 /60 * minte; //旋轉畫布 ctx.rotate(rad+rad2) ctx.beginPath(); //配置繪制效果 ctx.lineWidth=6 ctx.strokeStyle="#000" //線的兩端保持圓角 ctx.lineCap="round" //將繪制點移動到中心原點以下10個像素點 ctx.moveTo(0,10); //繪制一個線 ctx.lineTo(0,-(canvasWidth-150)/2) ctx.stroke() //恢復之前保存的環境 ctx.restore() }
繪制分針和秒針
繪制分針和秒針的方法和時針一樣,僅僅是繪制的顏色和寬度不一樣,這里不再詳細贅述.
//繪制分針 function drawMinute(minute) { ctx.save() var rad=2 * Math.PI / 60 * minute; ctx.rotate(rad) ctx.beginPath(); ctx.lineWidth=3 ctx.strokeStyle="#000" ctx.lineCap="round" ctx.moveTo(0,10); ctx.lineTo(0,-(canvasWidth-100)/2) ctx.stroke() ctx.restore() } //繪制秒針 function drawSecond(second) { ctx.save() var rad=2 * Math.PI / 60 * second; ctx.rotate(rad) ctx.beginPath(); ctx.lineWidth=3 ctx.strokeStyle="#f00" ctx.lineCap="round" ctx.moveTo(0,20); ctx.lineTo(0,-(canvasWidth-40)/2) ctx.stroke() ctx.restore() }
繪制中心白點
時針、分針和秒針的中心集合點出有白點,類似某個機械元件,將三個針鎖住,我們只要繪制原點即可。
//繪制原點 function drawPoint() { ctx.beginPath() ctx.fillStyle="#FFF" ctx.arc(0,0,3,0,2*Math.PI) ctx.fill() }
開始時鐘
我們將當前時間繪制到始終上面即可,需要注意的是,在繪制之前需要將之前繪制的東西清除掉。
//開始啟動時針 function startColor() { //清除畫布內容 ctx.clearRect(0,0,canvasWidth,canvasHeight) var date=new Date() var hour=date.getHours() var minute=date.getMinutes() var second=date.getSeconds() drawBackground() drawHours(hour,minute) drawMinute(minute) drawSecond(second) drawPoint() ctx.restore() }
設置定時重新繪制
要想動態的讓時鐘跑起來,我們需要設置一個定時執行器,每秒更新一次,這樣始終就完全動起來了
*請認真填寫需求信息,我們會在24小時內與您取得聯系。