跳到主要內容

發表文章

aliases in Window command

大家好,我是奶綠茶 身為前端,每天最常打的指令就是 npm run start npm run build npm run 什麼的 在 Mac 可以方便的將指令設定別名縮寫 那 PC 上呢 ? 可以用 doskey ns=npm run start 但每次啟動 cmd 都要重新設定 可以透過以下方法整合到 vsCode 設定你的 ailases 奶綠我將檔案放在 E:\aliases.cmd @echo off doskey n=npm run $* doskey ns=npm run start doskey nb=npm run build doskey s=npm run start doskey b=npm run build 開啟 vsCode Settings.json, 加入以下設定 "terminal.integrated.shellArgs.windows": [ "/k", "e:\\aliases.cmd" ] 好了,這樣每次開啟 terminal 就可以有縮寫功能 轉載請註明出處

超好用的無限免費網頁空間,無廣告,無流量限制

大家好,我是奶綠茶 今天來教大家如何申請一個無限免費速度又快的網頁空間 1 首先到  https://github.com/ 申請帳號(一直下一步,下一步,下一步) 2 到你的個人頁,切換上方的 tab 到 Repositories, 按下右鍵的 new 3 Repository name 一定要是這樣的格式 username.github.io 我的 github 網址是 github.com/milkmidi 那就要輸入 milkmidi.github.io 選擇 public, 這樣別人才看的到 private 有其他用途, 而且要付費才能使用 完成後按下 Create repository 5 安裝 SourceTree github 並不支援 FTP 或是網頁上傳,一定要透過指令碼 在這我們選用有圖型介面的軟體,方便大家學習 https://www.sourcetreeapp.com/ 下載並安裝 啟動後登入你的 github 帳號 6 clone 你的 github io 專案 右上角有個 Clone or download 點選後 複製 https 連結(不要選到 ssh ) 7 將 https 的連結貼到 SourceTree 8 上傳 html 到本機 github.io 資料夾,放一個 index.html 切換到 SourceTree, 這時會看到 Unstaged files 的欄位 選擇 Stage All 9 git 要求每次的 Commit, 都一定要打說明文字(好習慣) 輸入完成後,按下右邊的 Commit 10 發佈(Push),這樣就完成啦 可以到你的 http://milkmidi.github.io/ 去查看檔案有沒有出來 其他 Commit 可以想像是做一個記錄,你可以很多的 Commit 最後再一次 Push 上去 github 原本是給程式設計師用的版本控管服務 免費版提供無限空間讓你放檔案,但一定要是 public 想要有私有的 Project ,就只能付費 github.io 只能放靜態檔案,php, aspx 服務並不支援。 祝大家學習愉快 轉載請註明出處 奶綠的 gi...

mac backspace char ASCII 08

大家好,我是奶綠茶 最近在 mac 上踩到一個雷 不知道在什麼情況下,文字會多出一個 backspace 元字 在 PC 上會出現一個黑圓點 偏偏 VSCode 預設是不會顯示( Sublime 會出現白底黑字的BS標示) 然後被包在 JS 裡的字串,一切就爆掉了。 解法 VSCode 在 View / Toggle Control Character 這樣該字元就會顯示一個小字的 BS

gulp 前端自動化 - spritesheet

大家好,我是奶綠茶 今天來介紹如何使用 gulp 來自動化將圖片拼成 spritesheet 奶綠我使用的套件是 gulp.spritesmith https://www.npmjs.com/package/gulp.spritesmith 可以使用 handlebars 格式,拼出自己想要的 css 格式 {{#sprites}} .{{name}} { background-position: {{px.offset_x}} {{px.offset_y}}; width: {{px.width}}; height: {{px.height}}; background-image: url({{{escaped_image}}}); } {{/sprites}} gulp 的設定 gulp.task('sprite',()=>{ console.log('sprite'); const spriteData = gulp.src('src/sprite_src/*') .pipe(spritesmith({ imgName: '../img/sprite.png', cssName: '_sprite.css', padding: 4, imgOpts: { quality: 100 }, cssTemplate: 'src/css/handlebars/basic.handlebars', })); const imgStream = spriteData.img .pipe(buffer()) .pipe(gulp.dest('dist/img/')); const cssStream = spriteData.css .pipe(gulp.dest('src/css')); return merge(imgStream, cssStre...

2017 線上讀書會- vuex 跟 webpack 與 架構範本

分享一下奶綠我在 2017 02 線上讀書會 主講 vuex , webpack 的影片 轉載請註明出處 Github Source Code

webpack2 入門實戰 3 scss,html,file-loader

大家好,我是奶綠茶 上一篇 介紹了 webpack 的核心功能 loader 這篇再來補強各種常用的 loader css-loader:解悉 css 檔 extract-loader:這個有點難翻,下面會介紹 file-loader:存成實體的檔案, 如圖片 html-loader:解悉 html 檔 sass-loader:解悉 scss 檔 url-loader:解悉圖片路徑 webpack.config.js module.exports = { resolveLoader: { // 所有用到的 loader, -loader 可以不用打 moduleExtensions: [ "-loader" ], }, resolve: { // 在 require 檔案, 如果不想寫完整的路徑 // 可以加入這些目錄, 讓 webpack 自動尋找對的檔案 // 請注意我們加入了 src/img 路徑,後面會再介紹到 modules: [ path.resolve( 'src/html' ), path.resolve( 'src/img' ), path.resolve( 'src/css' ), path.resolve( 'src/js' ), path.resolve( "node_modules"), ], // 在 require 時可以不用打副檔名 extensions: [ ".js", ".scss" ] }, } 再來就是 loader 的介紹 scss 在這要做多組合的應用 先將 .scss 透過 scss-loader 轉換, 並產生 sourceMap 檔 再過 css-loader 最後再過 style-loader { test: /\.scss$/, // 多個 ...

webpack2 入門實戰 2 loader 篇

大家好我是奶綠茶 上一篇 介紹到基本的 webpack2 使用 這篇來介紹 webpack 的核心功能 loader 要告訴 webpack , 遇到什麼樣的檔案, 要用什麼樣的 loader 處理 我們就以 babel-loader 來做教學 1. 安裝 babel-loader babel-core:babel 的核心程式 babel-loader:webpack 用的 babel 轉換 loader babel-preset-es2015:babel 轉換成相下相容的語法 npm i -s -D babel-loader babel-core babel-preset-es2015 2. webpack.config.js 所有的 loader 規則都放在 module.rules 下 test:正則比對副檔名,只要是 .js 或 .jsx 都套用這個 loader loader:指定要套用的 loader options:要傳給 loader 的參數 注:loader寫法有二種,寫成一行, 用 ? 當參數傳 另一種就是寫 loader , 然後用 options 傳 個人比較愛後者 include:該 loader 只要找指定的資料夾,可加速 webpack 打包 exclude:同理,只是排除資料夾 var path = require( 'path' ); module.exports = { context: path.join( __dirname, '/src' ), entry: './js/app.js', output: { filename: 'bundle.js', path: path.resolve( __dirname, 'dist' ) }, module: { //https://webpack.js.org/configuration/module/ rules: [ { test: /\.(js|jsx)$/, // 寫法...

webpack2 入門實戰 1

大家好,我是奶綠茶 前端戰場不再只是寫寫 js / css , 各種框架、前處理工具百花齊放 身為前端工程師,不只要把程式寫完,還要寫好 老師說:選對好工具,事情就完成一半 如果你還在一隻 JS 打完全部程式,一隻 css 寫所有的 style 每次存檔還在手動 reload 網頁, 圖片壓 K 壓到不要不要的 透過奶綠伯的系列教學,讓你了解 webpack2 帶來的優勢 學會 webpack 可能不會加薪,但至少可以準時下班(誤) 1. 安裝 nodejs 請參考 gulp 安裝編 2. 安裝 global webpack , 筆者使用的是 2.2.1 版本 npm i webpack@2.2.1 -g 3. 在專案的根目錄放一隻 webpack.config.js entry:你的主 js 進入點 output.filename:webpack 打包後的檔名 output.path:webpack 打包後的路徑 var path = require('path'); module.exports = { entry: './src/app.js', output: { filename: 'bundle.js', path: path.resolve(__dirname, 'dist') } }; 4. require , module.exports 現在前端都 module 化 可以每個獨立的功能都寫成單一的 js module 除了好管理,也方便讓團隊使用 寫一隻 module_exports_util.js 每隻經過 webpack 打包的 js , 都會是獨立的檔案 所以變數都是私有的, 外部成員都無法得到 在這個 module 裡,我們想開放二個函式 add , getName 所以在最後的 module.exports 指定 筆記加入 jsdoc , 為了方便在開發時,能夠有型別的提示 var name = "milkmidi"; /** * @param {number} num1 * @param {number} num2 ...

前端攻城屍自動化教學 2 ( gulp 安裝篇)

大家好,我是奶綠茶 上一篇介紹了現成的前端工具 prepros 但總是有些功能無法滿足 這篇就來介紹純手工的前端自動化工具 gulp gulp 的官網一進去就會看到大大的 Automate and enhance your workflow http://gulpjs.com/ 1. 首先要安裝 npm (nodejs package manager) 安裝 nodejs 就會有 npm 的功能 https://nodejs.org/en/ 測試一下是否正常 進入終端機模式(Terminal) 輸入 node -v 是否有出現版本號 再輸入 npm -v 是否有出現版本號 2. 安裝 gulp 以下教學參考官方的原文 https://github.com/gulpjs/gulp/blob/master/docs/getting-started.md npm install --global gulp-cli --global 指的是全域應用,也可以縮寫 -g 3. 開啟你的專案資料夾,並啟動 Terminal, 輸入 npm init 之後一直接 entry , entry , entry ..... 就會產生一隻 package.json 裡面記錄了這個專案會用到的各種套件 4.安裝 gulp 到 devDependencies npm install --save-dev gulp --save-dev 可以縮寫成 -s -D 打開 package.json 可以看到 devDependencies 多了 gulp : xxx 版本號 測試一下是否運作正常 gulp 轉載請註明出處

Adobe Animate cc 廣告素材製作篇

大家好,我是奶綠茶 今天來介紹廣告素材的製作 使用的是 Adobe Animate CC 什麼,是新軟體!!!!! 大家不用怕,其實他的前身是 Adobe Flash 只是換個名字(去 Flash 化) 在使用的介面和功能都一模一模 如果本身就會使用 flash 的朋友一定不莫生 1. 開啟 Adobe Animate CC 選擇 HTML5 Canvas 格式 2.畫一個色塊,並轉成影片片段(MovieClip)元素 3. 拉影格拉至 25 ,選擇逼角移動補間動畫 4.這時可以看到影格間變成淺藍色 5. 幫元素取名為 box, 之後才可以用程式控制 6. 新增一個圖層,取名為 as (筆者的習慣) 加入程式碼,讓目前的時間軸停止動畫 this.stop(); 一定要加寫 this 程式碼才會對 7. 點擊 box 元素後,播放時間軸動畫, 按下發佈,或是 Ctrol + Entry , 就可以看到動畫了。 8. 有時在交素材時,媒體端不充許外載其他的程式 因為 Adobe Animate CC HTML5 Canvas 技術是使用一套叫 createjs 的 framework 他有外部引用他的程式碼 所以我們要修改一下 9. 把 createjs 的程式碼載回本機 10. 跟你的 html, js 放在同一個資料夾下 11. 用記事本開啟 .html , 修改引用的路徑,完工 祝大家學習愉快 轉載請註明出處 SourceCodeDownload

前端攻城屍自動化教學 1 (入門軟體篇, 使用 prepros)

大家好,我是奶綠茶 寫程式的最高原則,就是要"懶" "懶"指的是 "雜事交由電腦幫你完成" 你就可以專心在程式面上 比如說: uglifyjs JS 自動幫你把 JS 壓成一行 自動幫你轉 sass/ scss 程式碼一存檔,html 就自動 reload 如果這些事還要手動處理就真的麻煩了 新手可以直接使用現成的軟體 https://prepros.io/ 這是一套永久免費的軟體(如果覺的好用也支持一下作者) 免費版和正式版的功能都一樣,差在免費版三不五時會貼心的提醒你要不要付費 1. 下載軟體, 支援 PC(不支援 XP ) 和 Mac 2. 安裝, 一直下一步下一步下一步 3. 啟動軟體 4. 把你的專案資料夾拉進 prepros 5. 點選你的 js 檔 可以看到有五個選項 Auto Compile:當你存檔時是否要自動編譯,當然是要打勾呀。 SourceMaps:產生 sourcemap 檔,通常會搭配下方的 UglifyJS。 Uglify JS:幫你把 js 壓縮成一行。 Convert ES6 to ES5:將 ES6 的語法自動轉成 ES6。 Mangle Variables:將非全域變數的名字打亂。 筆者通常都是全勾。 6. 點選你的 css 檔 AutoCompile:是否存檔自動編譯 AutoPrefixCSS:自動加入 css3的 -web-kit 等前綴字。 SourceMaps:產生 sourceMap檔。 CompressCSS:將 css 壓縮成一行 Enable Cssnext:這個我還沒認真研究 7. 點選你的 html,接下右鍵 可以看到一個 Live Preview This File 按下後會啟動一個 localhost 的網頁,之後只要有修改 js, css ,都會自動 reload 8. 加掛 Proxy live reload 預設只能跑 html, 如果想要執行 php 或是 asp.net 的話 可以在設定裡面開啟 Live Preview Custom Server 9. 其他 Prepros 也整合了 FTP ,可以讓你方便...

JavaScript Namespae(命名空間)

大家好,我是奶綠茶 今天來討論 JavaScript Namesapce 命名空間 首先來了解一下 JS 的變數命名原理 var myVar = "milkmidi"; // 我是其他的程式碼 // 我是其他的程式碼 // ... // 我是其他的程式碼 var myVar = 0; 可以發現 myVar 被宣告了二次 而後者變數會蓋掉前則 function 也是一樣的原理 function myFun(){ } // 我是其他的程式碼 // 我是其他的程式碼 // ... // 我是其他的程式碼 function myFun(){ // 蓋掉之前同名的 myFun 函式 } 當然自己寫的程式不會發生同變數/函式 但如果跟其他人一起 Team Work 時,難保別人寫的名稱和你一樣 為了避免互蓋的問題 所以我們引用了 Namespace 的方法 但 JS 並沒有真正的 Namespace 而且是 Object 來模擬 // 用 Object 來當 Namespace // 變數名稱就用自己的英文名來命名 var milkmidi = {}; milkmidi.myVar = "milkmidi"; milkmidi.myFun = function(){ } // 我是其他的程式碼 // 我是其他的程式碼 // ... // 我是其他的程式碼 var otherPartner = {}; otherPartner.myVar = "otherPartner"; otherPartner.myFun = function(){ } // 要呼叫自己寫的函式就用 milkmidi.myFun(); // 同事寫的就用 otherPartner.myFun(); 這樣就可以決解彼此互蓋問題。 決解自己蓋自己的命名空間 為了開發方便 會把自己常用的 JS 依功能來分類 JS 命名空間也只是用Object變數來模擬,一樣會發生蓋掉的問題 // script a.js var milkmidi = {}; milkmidi.getTitle = function(){}; // script b.js var milkmidi = {}; milkmidi...

素材製作好工具 TexturePacker-4.x

大家好,我是奶綠茶 Flash 己經 byebye了 現在是 HTML5 時代 為了增加效能與載入速度 會把用到的素材圖片,壓成一大張 或是要製作成 SpriteSheet 現在 TexturePacker 4.x 推出來,來看看有什麼好用的新功能 把所有的圖片拉進來 奶綠我最常使用的是 CreateJS 和 PixiJS 選擇要輸出的格式,支援超多的啦 再按下 Publish 就會匯出你需要的格式,真的很方便 可以免費的下載使用 https://www.codeandweb.com/texturepacker 免費版會把你的一張圖更改掉,所以也只能用在教學或是測試 專案要用還是需要付費買一套的喔 TP:B65E3ECD TP:B65E3ECD

HTML5 Application cache 離線版網頁

大家好,我是奶綠茶 HTML4 時代,網頁一定要連網才看的到 但有時在特定的場合,不一定有網路或是網路不穩定就什麼都看不到 現在 HTML5 提供了一個離線版的技術 原理就是用 HTML5 Application cache 事先把需要的檔案存在使用的裝置(PC, iOS, Android) W3C的介紹: http://www.w3schools.com/html/html5_app_cache.asp Application cache 有三個特性 1. 離線瀏覽(已經快取,直接從裝置載入) 2. 載入速度快(已經快取,直接從裝置載入) 3. 漸少伺服器的檔案請求(已經快取,直接從裝置載入) (已經快取,直接從裝置載入),很重要,所以要說三次 以下為程式碼時間 1. 在你的 html tag 加上 manifest 的屬性,並直定一個 milkmidi.appcache 的文件檔 <html manifest="milkmidi.appcache"> </html> 網頁載入時,同時會一起載入 milkmidi.appcache 文件 該文件就是用來定義那些檔案要被快取 2. Manifest 文件 新增一個空白的記事本文件,副檔名存成 .appcache 即可 有三個特別的關鍵字要注意 CACHE MANIFEST CACHE MANIFEST app.css milkmidi.png app.js 告訴 Browser 要快取住 app.css , milkmidi.png , app.js這三個檔案 檔案路徑和 html 一樣,因為我的 demo 三個檔都跟 html 放在同一層路徑 如果你有開資料夾路徑的話,記得也要寫進去 不要快取的檔案 NETWORK NETWORK login.aspx 一般來說,快取都用在存放檔案(css,js,圖片等) html 檔因為 K 數小,一般都很少快取 如果你的展示環境並沒有網路,一定要全都快取的話 就可以把你的 html 檔也寫進 .appcache 裡 或是用第三個關鍵字來處理 FALLBACK FALLBACK offline.html 有網路時,就會連你的 index.html 離線...

CreateJS系列教學-第二篇 樂透轉轉機

大家好,我是奶綠茶 熟悉了 Adobe Flash CC2014 匯出成 html5 CreateJS 教學後 接著我們再來練習把 JS 的程式碼寫成 Flash CC2014 裡 直接匯出成 html5 格式,製作速度之快,是其他軟體比不上的呀。 請到老師的好友, Titan 老師, 把之前製作過的 Flash 樂透轉轉機 轉成 html5 格式,讓桌機和手機同時支援 用 Flash CC2014 開啟之前製作好的 fla 檔 原本是 AS 文件,要轉存成 html5 文件 選擇上方工具列:命令 / 從 AS3 文件格式轉換為 HTML5 Canvas 存好新檔後,可以看到屬性面試顯示為 HTML5 Canvas 文件 此時在時間軸寫的程式碼是 JS 而不是 AS 喔 在這個範列下,需要再增加二段 JS 程式碼 1. 在影格 1 加入點擊後開始播放 this.stop(); // 方法1,  用 on 的方法偵聽事件 this.on("click",function(){ // 用 on 的方法,此時 this 指向會是自己 console.log("on",this); this.gotoAndPlay(1); }); // 方法2,用 addEventListener 方法偵聽事件 this.addEventListener("click",function(){ // 用 addEventLister 方法, this 指向會指到 Window console.log( "addEventListener",this ); }); 二者的差別在 this 的 scope 指向,奶老師個人編好使用 on 的方法來偵聽 因為只要打二個字(整個就是懶)。 提醒一下,在本機開發時 Chrome 會檔掉 click 事件,跳出這樣的訊件 Uncaught An error has occurred. This is most likely due to security restrictions on reading canvas pixel data with local or cross-domain images. 因...

CreateJS系列教學-第一篇 AdobeCC2014 Export

大家好,我是奶綠茶 Adobe今年推出了 CC2014 系列工具, 身為 "阿豆比米" 是一定要來研究一下有什麼新功能。 就從最熟悉的 FlashCC2014 來介紹起 很多學生問我該不該再學 Flash 因為行動裝置上不能執行 Flash , 且 HTML5 的普及,Flash 的黃金時代已過去, 但這不表示 Flash 工具就從此退役喔。 對設計師來說,Flash還是世上最好用的動畫工具, 今天就來介紹如何使用 Adobe FlashCC2014, 將 Flash 裡的時間軸動畫輸出成 HTML5 的格式,這樣就能同時支援桌機與行動裝置平台。 軟體啟動可以看到新的啟動畫面,這也是每次有新版本推出時 筆者最期待的功能之一。 延續 Adobe Flash CC, 使用介面可以調整成暗色系 接著我們新增檔案,選擇 HTML5 Canvas 格式 AdobeCC20014 支援了 WebGL 的輸出,這個等下一篇再來介紹。 在屬性面版可以看到是 HTML5 Canvas 文件 如果想把舊有的 AS fla 轉成 HTML5 Canvas fla文件的話 只要執行上方工具列 / 命令 / 從 AS3 文件格式轉換為 HTML5 Canvas 即可 將舞台大小設定為 640 x 400 寬度 640 是因為當 Mobile Web viewport 設定成 width=device-width 時 大多數的裝置的寬度會得到 320, 因應 Retina 顯示, 所以要 320 乘 2 = 640。 接著我們拉個簡單的動畫, 讓圖示由左到右,再到下,再到左,再回來本來的位置 做一個口字型的移動。 時間軸長這樣 在第一格影格寫上程式碼 要注意喔,因為是 HTML5 Canvas 文件 所以是寫 JavaScript, 而不是 ActioinScript 完整的 CreateJS JavaScript 提示,這對初學者有很大的幫助 分邊在指定的影格下 this.stop(); 讓動畫播到此處時暫停,然後點擊後再播放 為了能讓任意處點擊都有效,所以在下方放置一個白色(或透明)的色塊 在第一個影格寫上點擊事件 要注意一下,因為是 JavaScript...

Android View y,translationY 比較

大家好,我是奶綠茶 Android View 物件有 setY 和 setTranslationY 二個屬性 都是可以更改 y軸座標,兩個屬性原理有些不一樣 setY(10) :以父容器為基準,設置 y 軸座標為 10 View.setY Source 如下 public void setY(float y) {         setTranslationY(y - mTop); } setTranslationY(10):自己為基準,設置 y 軸座標為 10 測試結果如下圖 紅底圖為測試的 ImageView,layout_below 綠底文字 上層有個淡紅色的 RelativeLayout 父容器 呼叫 getY() 時,因為經過 RelativeLayout 排版 以父容器為基準值,得到  109 getTranslationY() 以自己為準基,所以值為 0 轉載請註明出處

android Drawselectorontop

大家好,我是奶綠茶 在使用 ListView 時有個 drawselectonTop 的屬性能夠使用 原文: Controls whether the selection highlight drawable should be drawn on top of the item or behind it. 意思是說選取時是否要繪制在物件上 左圖是一般樣式,右圖是指定 drawselectonTop ,這樣選取時就會有 highlight的效果 一般的 ViewGroup 並沒有這樣的功能 謙裡有現成的Library可以使用,祝大家學習愉快。 轉載請註明出處 https://gist.github.com/chrisbanes/9091754

Flash Timeline to TweenMaxJS

大家好,我是奶綠茶 因為專案的需求 現在客戶都要製作 html 的網頁 但在製作動態效果上就有些麻煩 都只能用 js 寫出來 使用 createJS 轉出來是 HTML5 Canvas 版本 快樂  IE8 不支援 所以筆者寫了一個 Flash 的小外掛 能將 Flash 裡的時間軸動畫輸出成 html 的程式碼 動態的部份是使用 TweenMax 來製作 這樣就可以用熟悉的工具拉時間軸動畫 且支援舊的 Browser 不是所有的 Flash 裡的效果都有支援轉換 一定要本來 html 做的到的功能才行 感謝老婆大大 Betty 提供的idea(聽老婆的話就對了,羞) Adobe Flash CS6 Timeline to TweenMaxJS  將目前的時間軸轉成 TweenMax JS 版程式碼 使用方法: 1. 下載  flashTimelineToTweenMaxJS.zxp  2. 開啟 FlashCS6(FlashCC). 3. 在 PC 上,中文 OS 安裝英文版 Flash 軟體時, 安裝 extensions 會有語系問題 解決方法是從 Flash / Help / Manage Extensions 啟動並安裝 4. 製作你的時間軸動畫或 點我下載 Demo.fla  . 5. 第一個影格不能是空. 6. 點擊上方工具列 / 命令 / flashTimelineToTweenMaxJS  7. 在同 fla 資料夾下即可看到匯出的 html 檔. 8. html 需要引用 TweenMax 和 jQuery 的 Library. createJS 轉出來的是 html5 canvas 動畫, 快樂 IE8 不支援 我的小工具只是將動畫轉成 TweenMax 的程式碼,省去前端攻城屍 Coding 時間 zxp_source 資料夾裡是完整的 Source Code  完整的 SourceCode 我放在 Github 上 https://github.com/milkmidi/flashtimeline_to_tweenmaxjs 轉載請註明出處