今天要介紹的是 Vue.js3 的起手式,主要參考官方文件來學習
載入方式
1 | <script src="https://unpkg.com/vue@next"></script> |
引入之後,在index.html
檔案
1 | <div id="app"> |
1 | //JS |
- 畫面就會出現相應的文字
今天要介紹的是 Vue.js3 的起手式,主要參考官方文件來學習
1 | <script src="https://unpkg.com/vue@next"></script> |
index.html
檔案1 | <div id="app"> |
1 | //JS |
所建立的各分檔,個別會負責不同的區塊,並透過@import
放入主要的sass檔
_base.scss
1 | .container{ |
minmax(min, max)
minmax(6rem,1fr)
:設定格線最小6rem,最大1frrepeat(8,minmax(min-content,16rem))
:重複8個,最小:min-content;最大16rem[Day19] grid-template 屬性之 rows/columns
Min & Max Content Sizing in CSS Grid — 1/3 Flexibility
CSS Layout很難?用這招30秒就讓你輕鬆生出網頁版面!
_variable.scss
map與function的搭配使用1 | $colors:( |
layout/_header.scss
header的版面
grid-column: 1/-1; (1/11) grid-row: 1/2;
表示所佔的區隔1 | .header{ |
grid-column: 1/-1; //1/11 ; grid-row: 1/2;
What’s the difference between grid-column value 1/1 and 1/2?
_logo.scss
1 | .logo{ |
_heading.scss
1 | .heading{ |
layout/_navigation.scss
.first-nav
為放置右上角.second-nav
為放置下方,中間的位置1 |
|
lighten()
1 | //.first-nav-list |
components/_dropdown.scss
font-family: 'Font Awesome 5 Free'
:把icon當作字體使用1 | .dropdown-li{ |
製作下拉式選單的三角形
1 | .dropdown{ |
調整上方各色的三角形,並留下要保留的一個三角形
1 | &::before{ |
right: -2.8rem;
:條整位置對齊正方形listborder-bottom: 15px solid darken(color(tertiary),5%);
:修改三角形的顏色,使整體為灰色1 | .dropdown{ |
.dropdown-li
,會顯示下拉選單visibility
、opacity
1 | .dropdown-li{ |
使用@keyframes
做出動畫位置
Animation Duration(動畫整個完成一次的時間): (fade-in + visible) × images = duration.
Animation Delay:(fade-in + visible) × (ordinal position − 1) = delay.
Keyframes: 100 ÷ animation duration = percentage for 1 second.(100/20=5%),5%為1秒,所以4秒大約是20%的位置
1 | .slideshow{ |
Simplest CSS Slideshow
CSS3 Keyframes Animation
[筆記] CSS動畫Animation — @keyframes
完整解析 CSS 動畫 ( CSS Animation )
設置延遲時間(4秒),使每張圖片呈現(css的撰寫方式)
:nth-child()
選擇第幾張圖片1 | /*設置延遲時間,讓每張slide呈現4秒替換*/ |
@each
的寫法$animlist
,在each迴圈時要但進去的項目.slideshow-slide:nth-child
放入slide of number(取得列表中第一個值),後面接著寫下要執行的動作animation-delay: nth($item,2);
1 | ///改寫為=>$animlist:第幾個 延遲秒數, |
Sass Tutorials #9 - Nth Function In Lists
arrow-line
,於後續在scss中會運用此三個div製作箭頭符號1 | <div class="products-btn"> |
transform: rotateZ
:Z軸 (使其斜向旋轉45度)1 | &-line { |
transform-origin去設定物件變形的起始點
1 | &-line { |
1 | &-line-1{ |
1 |
|
使see more 出現
1 | .btn{ |
將箭頭向右移動,並呈現完整箭頭符號
.arrow
右移,並讓line-1得宜呈現並延展1 | .btn{ |
layout/_footer.scss
1 | .footer{ |
@mixin
一次修改2區的條例項目(mixin_scss
)1 | @mixin footerList { |
1 |
|
border-radius: 100%;
調整為圓形外框social-icons-lik
@each
來套入icon的顏色1 | &-link{ |
1 | .social-icons-item:nth-child(1) .social-icons-link { |
CSS預處理器,增加了一些編寫的特性,也可以說是運用程式化的方式寫CSS。
1 | npm install -g sass |
index.scss
檔案npm init --yes
npm i -g node-sass
(i -> install)"scripts"
1 | "scripts": { |
npm run watch
,control+c
退出$
,來宣告要使用的變數1 | // 創造顏色、字大小的變數 |
!global
就變成全域PS: 還是建議以global 的方式進行修改,才不會造成維護的混亂
-
以及_
,在sass中是一樣的$font-lg
改為$font_lg
一樣也會有效ul
、li
1 | .nav{ |
1 | .nav { |
&
,來指出parent element
:在這便是指<a>
1 | .nav{ |
1 | .nav { |
_
六角學院
_test.scss
為撰寫footer樣式的檔案
1 | .footer h3{ |
main.scss
要引入檔案的主要檔案
1 | @import "test"; |
轉譯為css(main.css)
1 | .footer h3 { |
@mixin
開頭,並自定義一個名稱@include
呼叫1 | @mixin horizontal-list{ |
1 | // 發現h1,h3樣式一樣 |
1 | .banner h1 { |
footer h3
加上hover
@mixin transition($param...)
加上設定參數特性...
1 | // 發現h1,h3樣式一樣 |
1 | .footer h3 { |
Day27:小事之 Transition 與 Animation
CSS3 Animation
新手也可以輕鬆玩轉 SASS - @mixin and @include
@function fontSize($size){
@return $size*2; }
建立函式1 | @function fontSize($size){ |
轉譯為css
1 | .banner p { |
1 | //設定預設為25px |
轉譯為css
1 | .footer p { |
1 | .footer p{ |
lighten()
1 | .nav{ |
1 | .nav { |
darken()
1 | .nav{ |
1 | .nav { |
3.transparentize()
1 | .nav{ |
1 | .nav { |
4.mix()
1 | .nav{ |
1 | .nav { |
mix(blue,green,10%)
表示只有10%的藍色,90%為綠色1 | .nav{ |
1 | .nav { |
ajax 在同一個頁面,不做刷新就可以改變頁面的內容。
q: query
取得授權:憑證
API 金鑰:AIzaSyCKPRCaNS-PQJLl2jzoQEf-O4I0tnrtd8M
1 | jQuery API D ocument => 表示看官方文件 |
1 | function getVideo() { |
1 | function insertItems(item) { |
(!prevPageToken)
沒有上一頁的tokendata-token="${nextPageToken}" data-query="${value}"
,用於後續抓取屬性內容。1 | function getBtn(value, prevPageToken, nextPageToken) { |
Youtube:Implementation: Pagination
1 | //取得下一頁的資料 |
token = $('#prev-button').data('token');
1 | //前一頁 |
HTML5 自定義屬性 data-* 和 jQuery.data 詳解
2018.06.20
[技術分享] 什麼是 HTML 5 中的資料屬性(data-* attribute)
使用fancyBox展示影片
使用iframe連結欲嵌入的外部影片連結
透過CDN方式連結fancybox套件
1 | <!-- fancyBox --> |
在我們點選該影片名稱區,插入影片id
1 | <h3><a data-fancybox data-type="iframe" data-src="https://www.youtube.com/embed/${videoId}" "href="javascript:;"> ${videoTitle} |
1 | $('[data-fancybox]').fancybox({ |
補充知識:
XMLHttpRequest(XHR):是一種規範,用來發ajax使用
token(令牌):唯一的、可以認證身份或取得資料
GET:向伺服器發request,(伺服器會告訴我們要發伺服器的網址,我們向它請求資訊)
參考資料
[30apis] Day 7 : YouTube Data API + 基礎 Fetch API
How To Implement A Youtube Video Search Using Youtube Data API V3
Youtube Data API 使用手札
Youtube Data API 申請
配額
1 | { |
問題:
至中央氣象局-氣象開放資料平台的網站,註冊會員
註冊並登入之後,要取得授權碼
到中央氣象局開放資料平臺之資料擷取API,查看要取用的資料
我的授權碼:CWB-F0145DA5-2539-4333-BAFD-466910C1EECC
參考資料:
https://www.youtube.com/watch?v=QDdn3yrsyCQ
[Day 13 - 即時天氣] 建立一個即時天氣 App - 前置準備
畫面主要樣式是參考:
Build a Simple Weather App With Vanilla JavaScript
1 | function getCity() { |
i
的長度 data.records.locations[0].location.length
opt = $('<option></option>')
創立選項標籤attr
,html
填入該地區的index,以及地區名稱1 | function getCity() { |
selectedCityIndex
變數,並取得被選取的city index$('#selector-list').get(0).selectedIndex
1 | function getCity() { |
getWeather();
)name
變數就是要取得資料內的地區名稱weather
變數就是取得氣象資料weatherDescription
以及weatherCode
分別就是氣象描述以及給予氣象描述的編號let weatherImg = checkImg(weatherCode);
依據天氣描述的分類放入對應圖示after()
在該區塊後面在插入想要呈現的其他標籤內容1 | function getWeather(data, locationIndex) { |
checkImg()
)weatherTypes.isThunderstorm.includes(weatherData)
includes()
取得 weatherTypes中各天氣情形陣列中,是否有符合參數的數值1 | function checkImg(code) { |
let i = 1; i < 7; i++
從1開始,6天timeIndex= 2 * i
是為了抓取一週時間所設置的index1 | function weekWeather(data, locationIndex) { |
抓取明天日期:How to get tomorrow’s date using JavaScript
日期與時間
1 | $(document).ready(function (e) { |
1 | function clear() { |
setInterval
設定倒數location.reload()
1.icon來源
font-awesome - cdnjs
1.設置難易度選單
difficulty為label
下拉選單使用option
1 | <div id="settings" class="settings"> |
words[Math.floor(Math.random() * words.length)]
$('#word').text(randomItem);
讓文字呈現於畫面中1 | const words = [ |
1 | function getRandomword() { |
let text = $('#text').val(); let Item = randomItem;
console.log(Item);
查看抓取到的單字1 | //輸入單字核對 |
setInterval()
「不斷循環」地固定延遲了某段時間之後,才去執行對應的程式碼,使用 clearInterval()
来終止1 | // Init time |
display:flex
呈現該內容1 | //遊戲結束 |
$('#difficulty').val()
1 | //如果儲存端不是空值(已有選擇),就以此為主,否則的話就是medium |
checkWord()
函式中,如過答對題目的條件下設置1 | //time += 5; |
gameOver()a
1 | //增加判斷,分數達到一標準,會出現圖示 |
Play Again
的按鈕Math.floor(Math.random() * 100) + 1
取得1-1001 | // 取得隨1-100隨機數字 |
recognition.onresult
設定取得語音辨識的結果writeMessage(myWord);checkNumber(myWord);
兩個函式1 | try { |
1 | //取得語音辨識的結果 |
Using the Web Speech API
How to build a simple speech recognition app
msg
的div插入辨識語言的結果文字1 | function writeMessage(myWord) { |
1 | function checkNumber(myWord) { |
recognition.onend
使用於控制語音識別的服務,並應用在結束語音識別時的情境。recognition.start();
每次數字猜完後,都會重新開始語音識別,直到猜中。play again
按鈕,所以要設定此按鈕,按下後能夠重新開始遊戲 =>window.location.reload()
1 | //https://stackoverflow.com/questions/51080738/how-to-make-speech-recognition-continous-for-a-fix-time-period |
其他參考資料:
Converting from Speech to Text with JavaScript
JavaScript Speech Recognition
Day21 – Speech Recognition (lukechu)
Day 21 - Speech Detection (Arel)
DAY20 : Speech Detection (BROWN)
1 | /*增加讓螢幕寬度變化時,字的大小隨之改變 |
Day22:小事之 Media Query CSS設定響應式(RWD)有幾種方法
1 | //getFullYear(),用來取得日期物件當中本地時間的年份 |
時間日期
JavaScript Date 時間和日期
getFullYear() Method
currentTime
取得目前時間
diff = newYearTime - currentTime;
:計算出目前與未來最終日期的時間差異(此相減得出的是毫秒)
計算天數、小時、秒數
const d
1天等於24小時,1小時等於60分鐘,1分鐘等於60秒,1秒等於1000毫秒。所以,msec / 1000 / 60 / 60 / 24 保留整數就是天數。h = Math.floor(diff / 1000 / 60 / 60) % 24
:計算小時,並以除以24之後的餘數,來得到剩餘的小時。將取得的日期帶入畫面
.html()
:$('#days').html(d);
$('#hours').html(h < 10 ? '0' + h : h);
,當數字小於10,要0+h;反之就只要呈現h。最後要設定setInterval(updateCountdown, 1000);
,使其每秒倒數。
1 | function updateCountdown() { |
參考資料:
【JS】javascript時間Date()介紹與補零應用的技巧!!!
js和vue實現時分秒倒計時的方法
三元運算子:
Day19【ES6 小筆記】三元運算子-以哥哥的擇偶條件為例
1 | setTimeout(function () { |
1 | $('#year').html(currentYear + 1) |
網頁練習 -倒數計時器實作(上)
5 Best Countdown Timer JavaScript Libraries (2020 Update)
網頁練習 -倒數計時器實作(下)
1.隨著頁面的往下捲動,會載入新的資料
2.網頁的各資料是有順序,資料左上會有編碼
position: absolute;
定位位置,並利用並利用top
、left
調整位置display: flex;
調整數字的位置,align-items: center;
justify-content: center;
使水平、垂直置中1 | .post .number { |
animation: bounce 0.5s ease-in infinite;
@keyframes bounce
,設定在某時間點,translateY
,的位置。animation-delay: 0.2s;
1 | .loader { |
$.ajax
執行async$.ajax
抓取API資料的方式,如url、type、dataTypelet limit = 5;let page = 1
於url中加入該變數$.each
來執行$.each
先傳入該資料(data)陣列,其function (index, value)
放入索引以及值的內容。postEl
變數,創造名為post
的div
=> $('\<div />')
post
classpostEl.appendTo('#posts-container');
1 | let limit = 5 |
查看是否有成功取得資料:console.log(data);
https://stackoverflow.com/questions/10402567/jquery-div-vs-div
each()
scrollTop
網頁右邊的卷軸到最上端網頁的距離有多少scrollHeight
取得整個沒被擋住的高、clientHeight
取得元素的高度(含padding 不含 border)例子:
1 | $(function () { |
所以可能要從body、document來取得
scrollTop + clientHeight >= scrollHeight - 5
來計算,當捲軸捲到該位置時,要呈現載入畫面setTimeout()
,在1秒後消除載入圖示,接著在300毫秒後,馬上換頁執行載入新資料1 | $(window).scroll(function () { |
參考資料:
[筆記] 計算網頁底部位置,當網頁達到底部時才產生效果─jQuery
一次搞懂 clientHeight/scrollHeight/scrollTop的區別
談談 JavaScript 的 setTimeout 與 setInterval
.keyup
指放開鍵盤的那個剎那,觸發該事件var text
取得輸入值並轉為小寫indexOf()
方法用來判斷字串字串變數中是否包含某字串。1 | //輸入框搜尋//https://makitweb.com/jquery-search-text-in-the-element-with-contains-selector/ (=>Loop all .content ) |
參考資料:
比較 keydown, keypress, keyup 的差異
jQuery – Search text in the Element with :contains() Selector
JavaScript String indexOf()
補充參考:
JS20min Day — 20 AJAX 非同步處理 (Asynchronous JavaScript and XML)
回呼函式 Callbacks、Promises 物件、Async/Await 非同步流程控制 - 彭彭直播 at 2019/04/07
forEach()
來將陣列資料呈現到畫面map()
計算金額的倍數filter()
篩選出符合條件的資料sort()
用來排序資料reduce()
計算陣列中資料的累加結果https://randomuser.me/api
1.原本使用fetch
1 | function getRandomUser() { |
2.Fetch 搭配 async、await
1 | async function getRandomUser() { |
3.函式中的撰寫
data
const user = data.results[0];
user.name.first
data 為前面
1 |
|
使用forEach()
來呈現畫面的資料
div
並增加class給他innerHTML
插入內容1 | //將新創立的物件輸出呈現到畫面上(dom) |
注意:如果本來 HTML 某元素有既有的內容,但是又用 innerHTML 在同樣的元素上加上內容的時候,innerHTML 會把原本寫的東西覆蓋掉。
1 | function updateDOM(provideData) { |
1 | function updateDOM(provideData = data) { |
JavaScript 初心者筆記: DOM - 如何用 JS 新增 HTML 內容
1 | //將回傳的隨機數字,轉換為金錢格式 -https://stackoverflow.com/questions/149055/how-to-format-numbers-as-currency-strings |
formatMoney()
要放入剛剛forEach所傳入的金額,從這邊去調整數字的格式1 | element.innerHTML = `<strong>${item.name}</strong> ${formatMoney(item.money)}`; |
1 | //設置點擊事件,按下add user,增加人 |
map()
來,建立 double money事件1 | //double money |
1 | //double money |
呈現於畫面
1 | //double money |
forEach()
: 针对每一个元素执行提供的函数(executes a provided function once for each array element)。map()
: 创建一个新的数组,其中每一个元素由调用数组中的每一个元素执行提供的函数得来(creates a new array with the results of calling a provided function on every element in the calling array)。
JavaScript中Map和ForEach的区别
sort
來建立排名1 |
|
sort()
sort
依據字串的 Unicode 編碼進行排序,會改變原本的陣列。
sort()
會將所有元素轉成字串後,且以第一個字元為對象,再進行排序。1 | const arr = [5, 9, 1, 3, 2, 6]; |
參考資料:JS 將陣列 Array 重新排列的 sort()、淺談 JS sort() 到背後排序方法
filter
篩選百萬以上的人員1 | function filterMillionaires() { |
PS:filter()
的使用是回傳新陣列,原陣列不改變
拆解內部參數
accumulator
用來累積回呼函式回傳值的累加器(accumulator)或 initialValue(若有提供的話,詳如下敘)。累加器是上一次呼叫後,所回傳的累加數值。
currentValue
原陣列目前所迭代處理中的元素。
console.log(accumulator);
console.log(currentValue);
reduce()
所回傳的參數資料後…accumulator += currentValue.money
1 | //calculateMoney |