近一陣時間因為公司項目快要上線,所以文章會更新的很慢,望童靴們見諒。
用寶珠打扮自己,不如用知識充實自己!
關注小白前端,持續收到文章推送。
布爾操作符一共有三個:邏輯非(!),邏輯與(&&),邏輯或(||)。在開發中,布爾操作符用的很多。像if...else就經常要用到它去測試兩個值。
邏輯非用一個嘆號(!)表示。邏輯與操作符會把操作數先轉換為布爾值,然后在對其求反。
邏輯非遵循下面的規則:
操作數是對象,返回false;
操作數是空字符串,返回true;
操作數是非空字符串,返回false;
操作數是數值0,返回true;
操作數是任何非0數值(包括無窮Infinity),返回false;
操作數是null或者undefined或者NaN,則返回true;
我們來看幾個例子:
我們在瀏覽器控制臺看一下結果:
邏輯非也可以把一個值轉換為對應的布爾值,只需要在加一個嘆號表示,如下例子:
console.log(!!0) //false
console.log(!!"") //false
console.log(!!"abc") //true
邏輯與用兩個和號(&&)表示,有兩個操作數。如下例子:
var result=true && false
邏輯與的規則如下:
如果兩個操作數都是true,則結果返回true;
如果兩個操作數都是false,則結果返回false;
如果兩個操作數中任意一個是false,則結果返回false;
邏輯與操作符可以用于任何操作數,不僅僅布爾值。在有一個操作數不是布爾值的情況下,邏輯與操作就不一定返回布爾值了。那么,它應該遵循以下的規則:
第一個操作數是對象,返回第二個操作數;
如果兩個都是對象,則返回第一個操作數;
如果第一個操作數是null,則返回null;
如果第一個操作數是undefined,則返回undefined;
如果第一個操作數是NaN,則返回NaN;
邏輯與操作屬于短路操作,如果第一個操作數能決定結果,那么就不會對第二個操作數求值了。如果第一個操作數是false,那么第二個操作數是什么值,結果都不會是true了。
如下:
var a=true;
console.log(a && b); //發生錯誤
如上因為a是true,所以對第二個操作數進行求值。但因為b沒有聲明,因此會報錯。
邏輯或用兩個豎線(||)表示,有兩個操作數。如下例子所示:
var result=true || false;
邏輯或的規則如下:
如果兩個操作數都是true,則返回true;
如果兩個操作數都是false,則返回false;
如果兩個操作數任意一個是true,則返回 true;
和邏輯與相似,如果有一個操作數不是布爾值,邏輯或也不一定返回布爾值。它遵循如下規則:
第一個操作數是對象,則返回第一個操作數;
第一個操作數的求值是false,則返回第二個;
如果兩個操作數都是對象,則返回第一個;
如果兩個操作數是null,則返回null;
如果兩個操作數是NaN,則返回NaN;
如果兩個操作數是undefined,則返回undefined;
如下例子:
console.log(true || false); //true
console.log(null || "123"); // 123
console.log(true || undefined); //true
console.log(0 || 2); //2
console.log(false || true); //true
今天內容有點多,但都是基礎的東西。童靴們自己打開編輯器練習一下,看看不同類型的操作數都會返回什么結果。
文作者:HelloGitHub-kalifun
圖表庫千萬個今天 HelloGitHub 給大家推薦個很有“特色”的圖表庫:一個手繪風格的 JS 圖表庫 —— Chart.xkcd,快收起你緊繃、嚴肅的面容讓我們一起看看用手繪風格展示數據的效果。
一、介紹
項目地址:https://github.com/timqian/chart.xkcd
Chart.xkcd 是一個圖表庫,可繪制“非精細”、“卡通”或“手繪”樣式的圖表。
效果是不是很可愛?那下面就跟著 HelloGitHub 發起的《講解開源項目》[1]的教程一起學習、上手使用起來吧!
二、快速入手
使用 Chart.xkcd 很容易,只需頁面中包含庫的引用和一個用于顯示圖表的 <svg> 節點即可。
2.1 代碼示例
先用一段簡短的代碼,讓大家了解下基本的參數和代碼的樣子,后面會有可運行的代碼示例片段供大家學習和使用 。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <!--將 SVG 元素直接嵌入 HTML 頁面中--> <svg class="line-chart"></svg> <!--引入 JS 庫--> <script src="https://cdn.jsdelivr.net/npm/chart.xkcd@1.1/dist/chart.xkcd.min.js"></script> <script> //關鍵代碼塊 const svg=document.querySelector('.line-chart') new chartXkcd.Line(svg, { title: '', xLabel: '', yLabel: '', data: {...}, options: {}, }); </script> </body> </html>
2.2 參數說明
三、圖表類型
Chart.xkcd 支持多樣的圖表類型,下面將逐一講解和實現:折線圖、XY 圖、條形圖、圓餅/甜甜圈圖、雷達圖,實現的示例代碼完整可運行、注釋完整、包含參數說明。
tips:下文中的示例代碼均可直接運行,保存為 html 文件便可在本機查看效果。
3.1 折線圖
折線圖以折線形式顯示一系列數據點,它可以用于顯示趨勢數據或不同數據集的比較。
示例代碼
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <!--將 SVG 元素直接嵌入 HTML 頁面中--> <svg class="line-chart"></svg> <!--引入 JS 庫--> <script src="https://cdn.jsdelivr.net/npm/chart.xkcd@1.1/dist/chart.xkcd.min.js"></script> <script> // querySelector() 方法返回文檔中匹配指定 CSS 選擇器的一個元素。獲取文檔中 class=".line-chart" 的元素。 const svg=document.querySelector('.line-chart'); // chartXkcd.Line 創建一個折線圖 const lineChart=new chartXkcd.Line(svg, { //圖表的標題 title: 'Monthly income of an indie developer', // 圖表的 x 標簽 xLabel: 'Month', // 圖表的 y 標簽 yLabel: '$ Dollors', // 需要可視化的數據 data: { // x 軸數據 labels: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10'], // y 軸數據 datasets: [{ // 第一組數據 label: 'Plan', data: [30, 70, 200, 300, 500, 800, 1500, 2900, 5000, 8000], }, { // 第二組數據 label: 'Reality', data: [0, 1, 30, 70, 80, 100, 50, 80, 40, 150], }], }, // 可選配置以自定義圖表的外觀 options: { // 自定義要在 y 軸上看到的刻度號(默認為 3) yTickCount: 3, // 指定要放置圖例的位置 legendPosition: chartXkcd.config.positionType.upLeft } }); </script> </body> </html>
參數說明
效果展示
3.2 XY 圖
XY 圖表用于通過指定點的 XY 坐標來繪制點,您也可以通過連接這些點來繪制 XY 折線圖。
示例代碼
<script> // querySelector() 方法返回文檔中匹配指定 CSS 選擇器的一個元素。獲取文檔中 class=".xy-chart" 的元素。 const svg=document.querySelector('.xy-chart'); //chartXkcd.XY 創建一個XY圖 new chartXkcd.XY(svg, { //圖表的標題 title: 'Pokemon farms', // 圖表的 x 標簽 xLabel: 'Coodinate', // 圖表的 y 標簽 yLabel: 'Count', // 需要可視化的數據 data: { datasets: [{ // 第一組數據 label: 'Pikachu', data: [{ x: 3, y: 10 }, { x: 4, y: 122 }, { x: 10, y: 100 }, { x: 1, y: 2 }, { x: 2, y: 4 }], }, { // 第二組數據 label: 'Squirtle', data: [{ x: 3, y: 122 }, { x: 4, y: 212 }, { x: -3, y: 100 }, { x: 1, y: 1 }, { x: 1.5, y: 12 }], }], }, options: { // 自定義要在 x 軸上看到的刻度號(默認為 3) xTickCount: 5, // 自定義要在 y 軸上看到的刻度號(默認為 3) yTickCount: 5, // 指定要放置圖例的位置 legendPosition: chartXkcd.config.positionType.upRight, // 用線連接點(默認 false) showLine: false, // 指定時間格式 timeFormat: undefined, // 更改點的大小(默認為 1) dotSize: 1, }, }); </script>
參數說明
效果展示
如果你想將這些點連接起來,讓數據對比更加明顯的話。請修改 showLine:true 再刷新頁面你就可以看到連線的效果了。
3.3 條形圖
條形圖提供了一種顯示以豎條表示的數據值的方式。
示例代碼
<script> // querySelector() 方法返回文檔中匹配指定 CSS 選擇器的一個元素。獲取文檔中 class=".bar-chart" 的元素。 const svg=document.querySelector('.bar-chart'); // chartXkcd.Bar 創建一個條形圖 const barChart=new chartXkcd.Bar(svg, { // 圖表的標題 title: 'github stars VS patron number', // xLabel: '', // optional // yLabel: '', // optional // 圖表數據 data: { labels: ['github stars', 'patrons'], datasets: [{ data: [100, 2], }], }, options: { // 自定義要在 y 軸上看到的刻度號(默認為 3) yTickCount: 2, }, }); </script>
參數說明
效果展示
3.4 圓餅/甜甜圈圖
餅圖廣泛得應用在各個領域,用于表示不同分類的占比情況,通過弧度大小來對比各種分類。餅圖通過將一個圓餅按照分類的占比劃分成多個區塊,整個圓餅代表數據的總量,每個區塊(圓弧)表示該分類占總體的比例大小,所有區塊(圓弧)的加和等于 100%。
示例代碼
<script> // querySelector() 方法返回文檔中匹配指定 CSS 選擇器的一個元素。獲取文檔中 class=".pie-chart" 的元素。 const svg=document.querySelector('.pie-chart'); // chartXkcd.Pie 創建一個圓餅圖 const pieChart=new chartXkcd.Pie(svg, { // 圖表的標題 title: 'What Tim made of', // 需要可視化的數據 data: { labels: ['a', 'b', 'e', 'f', 'g'], datasets: [{ data: [500, 200, 80, 90, 100], }], }, options: { // 指定空的餅圖半徑 innerRadius: 0.5, // 指定要放置圖例的位置 legendPosition: chartXkcd.config.positionType.upRight, }, }); </script>
參數說明
效果展示
3.5 雷達圖
雷達圖(Radar Chart)又被叫做蜘蛛網圖,適用于顯示三個或更多的維度的變量。雷達圖是以在同一點開始的軸上顯示的三個或更多個變量的二維圖表的形式來顯示多元數據的方法,其中軸的相對位置和角度通常是無意義的。
示例代碼
<script> // querySelector() 方法返回文檔中匹配指定 CSS 選擇器的一個元素。獲取文檔中 class=".radar-chart" 的元素。 const svg=document.querySelector('.radar-chart'); // chartXkcd.Radar 創建一個雷達圖 const radarChart=new chartXkcd.Radar(svg, { // 圖表的標題 title: 'Letters in random words', // 需要可視化的數據 data: { labels: ['c', 'h', 'a', 'r', 't'], datasets: [{ label: 'ccharrrt', data: [2, 1, 1, 3, 1], }, { label: 'chhaart', data: [1, 2, 2, 1, 1], }], }, options: { // 在圖表中顯示圖例 showLegend: true, // 點的大小 dotSize: 0.8, // 在每行附近顯示標簽 showLabels: true, // 指定要放置圖例的位置 legendPosition: chartXkcd.config.positionType.upRight, // unxkcdify: true, }, }); </script>
參數說明
效果展示
四、最后
以上就是講解的全部內容,相信教程至此 Chart.xkcd 庫的基本用法你已經基本掌握,后面就可以用來今天學到的東西,提高自己項目的顏值了。
有了 Chart.xkcd 讓數據可愛地展示出來并不難,快動手自己實現一個吧~
參考資料
[1]《講解開源項目》: https://github.com/HelloGitHub-Team/Article
[2]CHART.XKCD 官方文檔: https://timqian.com/chart.xkcd/
[3]CHART.XKCD 項目地址: https://github.com/timqian/chart.xkcd
『講解開源項目系列』——讓對開源項目感興趣的人不再畏懼、讓開源項目的發起者不再孤單。跟著我們的文章,你會發現編程的樂趣、使用和發現參與開源項目如此簡單。歡迎留言聯系我們、加入我們,讓更多人愛上開源、貢獻開源~
術家的作品大多有點高深,除非是寫實類作品,不然你不一定能「看懂」。
而代碼對大多數人來說也是艱難的。對非專業人士來說,代碼可能比藝術品還要復雜。那么,如果用代碼來搞藝術創作,這一切會更簡單嗎?
《索思沃爾德的夜晚》是一幅安靜的圖畫。即將西下的太陽光撒在湖面上,湖上波光粼粼,泛著金光,波浪的漣漪一點點的散開。岸上的建筑物則安然有序,燈塔、圍墻、小房子,組成了這幅安靜的風景圖。
有人覺得這幅畫看上去冷清,過于安靜,是一幅悲傷的畫。
有人覺得這幅畫陽光照耀四方,小屋整齊的立在一旁,是一幅和諧又溫暖的風景畫。
當然,如果這些人知道這幅畫是用代碼畫的,可能就只會說這是一幅很漂亮的畫了。畢竟代碼聽上去就和藝術無關,和情感表達無緣。
此畫的作者本·埃文斯是一個網頁設計師,是一個前端開發,也是一個插畫家。《索思沃爾德的夜晚》是他用層疊樣式表(CSS)畫的一幅作品。除了這幅畫,他還用 CSS 畫過大海,畫過撲克牌。
和他一樣使用 CSS 畫畫的人也不止一個,近些年還有越來越多的趨勢。
自由網絡開發者克里斯·帕特爾畫的辛普森一家是前些年的作品,只是近來才開始被人注意。在 GitHub 上,你可以輕易找到創作者的代碼,并在它的基礎上進行更改。
當你復制原作者的代碼,再稍以修改后,你就可以畫出屬于自己的辛普森。你還可以給他變色,讓他從透明變成黃色、藍色、綠色。
在 CSS 作圖這個領域,數字藝術家戴安娜·史密斯則是一個不可忽略的先驅人物,他以 CSS 的巴洛克風格作畫而聞名,創作過多幅 18 世紀復古風格的作品,也畫過現實向的靜物海報。
史密斯的作品從來不使用繪圖軟件,他只用手寫的 HTML / CSS 代碼創建精美的圖片。作為一個每天 90% 的工作都圍繞著 JavaScript 工作的程序員,史密斯卻更喜歡 CSS 作畫,因為 CSS 有一些限制的規則。
這只是我喜歡 CSS 的眾多原因之一。
有限的規則正是它的樂趣所在,你不會期望 CSS 能滿足你所有的需求。這就是為什么當你在 CSS 最終找到了一種(可以滿足你的)方法時,它就會變得更有價值。
在工作之余,史密斯還會不斷回到 CSS 尋找藝術靈感,在限制之中創作新的藝術作品。
因為一些關于這些限制的東西一直在召喚著我。當我在說嚴格的限制是激發創造力的最佳催化劑時,我并不孤單。因為完全的藝術創作自由可能是一個令人麻痹的概念。
值得一提的是,有限制的 CSS 圖畫不是一個完全靜態的藝術作品。不管是簡單的辛普森一家頭像畫還是精致的巴洛克肖像畫、風景畫,他們都是會變化的。每個人可以通過改變開源的代碼來創作出自己的 CSS 圖畫。
在此之外,選擇不同的瀏覽器打開圖像也會呈現不同的作品。作為實時呈現的圖畫,每個瀏覽器在加載頁面時都會將圖畫的代碼呈現為繪圖。
而大多數的數字藝術家都是在 Chrome 瀏覽器上處理代碼的。所以除了 Chrome 瀏覽器能夠呈現圖片本身預想的畫作外,其它瀏覽器都會「畫」出不同的圖像。這也展示了不同瀏覽器轉換工作的差別。
創作者說不考慮圖畫的兼容性問題,反而更有意思。
由于這個項目的藝術性原因,我并不關心跨瀏覽器的兼容性,所以實時預覽可能在除 Chrome 之外的任何瀏覽器中看起來都很可笑。
適配單一瀏覽器也有驚喜。當我們將這些代碼放進不同瀏覽器的時候,有的圖像有了出乎意料的變化。
Chrome 瀏覽器在羽毛和發絲的轉換上非常細致,展現了本身的細節,Safari 瀏覽器則在部分高光的處理上有點過火,裙子也多了一條豎線。
▲ 左為 Chrome 瀏覽器呈現效果,右為 Safari 瀏覽器呈現效果
不過隨著時間往前移,我們用更多版本的瀏覽器配上 CSS 代碼圖畫時,呈現效果就會更特別。
這幅畫本尊是這樣的:
在 Safari 瀏覽器中,蕾絲的花邊裝飾直接蓋在了女人的臉上,看不出原圖。
在 2014 版本的 Opera 瀏覽器中,畫作有了一種全然不同的風格。
脖子分成了三個部分,眉毛、頭發、眼睫毛的位置都出現了偏移和錯位,更條碼式。
而 Edge 瀏覽器則自動消掉了畫作的棱角,使整幅圖畫更為平滑、陰沉。
最后在上古時期的網景瀏覽器中,這位女士的嘴巴、眼睛等五官都變成了不同大小的方塊,有點樂高的感覺,風格獨樹一幟。
作為該領域的先驅人物,史密斯給這些圖畫的表現賦予了更多的意義:
當你在不同的瀏覽器上查看這張圖片時,你就像是在查看互聯網的歷史,以及當時用戶對瀏覽器的要求。
代碼是冰冷的、理性的代表,它是沒有感情的。而畫作的藝術則能表達作者豐沛的情感和思想。但當理性的代碼用來創作感性的畫作時,這一切會改變嗎?
在一部分人看來,數字藝術是不能算作真正的藝術的。
當大片空白可以在瞬息間充滿五彩的色塊,渲染過度也能在強大工具的幫助下變得快捷且自然時,人們認為這不再是藝術了。雖然數字化工具做的畫也可以很漂亮,很有創意,但人們會覺得它沒有「靈魂」。即使它能模仿油畫、水墨等不同風格,但創造出的作品也稱不上藝術。
這個問題甚至可以上升到「代碼是不是藝術」的問題上,深入討論一下藝術的定義和內涵。
在主流觀念中來,那些使用新工具去創作藝術作品的人不算正統藝術家。即便要稱為藝術家,也得在前面加上「數字」兩個字。在大眾的、觀念中,數字藝術家和傳統的藝術家涇渭分明,完全不同。即便這兩種藝術家在顯示生活中已經有了很多工作的交織、身份的重合。
對當下的數字時代而言,隨著互聯網在我們生活中的滲透程度越來越深。每個人可能都會成為數字藝術家,在創作的過程中,都需要數字工具的幫助。
而純粹用數字工具畫出的 CSS 作圖在可玩性、趣味性上都強于普通的藝術作品。即使我們不把它看作一個藝術杰作,它也是一個互聯網的行為藝術作品。
它讓我們意識到自己生活在一個現實扭曲的文化泛濫時代,人與人之間很難獲得一致的事實版本。
你看到的東西是由你的設備版本決定的,是和你選擇的數字工具有關的。當我們看到的東西不一樣的時候,我們創作的東西也是不一樣的。
CSS 作畫與其說是藝術,不如說它讓我們看到了互聯網的一種能力,一次進程,一段歷史。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。