2023年1月30日 星期一

HTML5:分數小教具:分數條

2023年1月30日 星期一

繼上次的「雄:HTML5:真分數小教具」後,這是另一個分數小教具。在觀察等值分數時,我們會使用長條形的分數條,甚至分數牆。這一個分數條,可以自行新增、刪除來調整需要的數量,也可以自行控制每一長條平分的數量及是否要顯示數字;設定完後,還可以將結果,以網址的方式分享給別人,或是自行留存。

HTML5:分數條:按三角形後會出現工具列

需要調整時,按一下分數條下方的三角形,畫面就會出現工具圖示;如果拖曳三角形,則可以改變著色的範圍。

下方的工具列,由左而右依序為:

  1. 刪除選取的分數條。
  2. 在下方新增一個分數條。
  3. 顯示/隱藏數字。
  4. 「減號」:減少平分數量。
  5. 「加號」:增加平分數量。

如果拖曳整個「板子」,則可以改變它擺放的位置。

除此之外,在畫面的右下角有一個「分享」的按鈕,按下去以後,會將目前的所有分數條的狀態與設定輸出成一個網址,並複製到剪貼簿,老師可以將這網址給學生使用,學生也可以將自己操作好的結果再以分享的方式,回傳給老師。

按下面的按鈕,來試試這個分數小教具吧!


分隔線以下的一堆文字,純為記錄用,可以不用理會。



開發筆記

在分數條中有兩個比較特別的地方,值得記錄一下來,一是調整著色部份的三角形其實是利用文字元件的邊框畫出來的,只要這樣的 CSS 就能畫面三角形:


.arrow {
  width: 0px;
  height: 0px;
  border-left: 14px solid transparent;
  border-right: 14px solid transparent;
  border-bottom: 28px solid green;
}

重點是底下的邊框最粗,左、右兩側稍細,上面則為 0,這樣子就畫出了上面尖尖的三角形了。形狀則調整兩個 14 和 28 的比例。

另一個則是每一個長條中間均分的格子,也是利用 CSS 的「background-size」、「background-image」畫出來的,因為分數條的需求是在橫向等距畫出直線,所以假設分數條的大小是 600x60,然後要畫出等分為六的分數條,每一格就是 100x60,就套用這樣的設定:

.rect {
  background-size: 100px 60px;
  background-image: linear-gradient(to right, black 2px, transparent 2px), linear-gradient(to bottom, black 2px, transparent 2px);
}

依上面的設定,它會由左向右,每 100px 畫出 2px 寬的黑色直線,直到分數條的右邊端點;由上而下,每 60px 畫出 2px 寬的黑色橫線,直到分數條的底部。

使用 LimeJS frame work 開發的好處是很多 CSS 的問題都不用傷神;但也因此而少了磨鍊的機會。所以這個小教具是先有元件版,才又自我挑戰,不使用 frame work,一字一字的堆出來。其中耗掉最多時間的地方是在處理拖曳物件的部份,「相對位置」、「絶對位置」,和在一起,實在不好玩。筆記一下幾個跟計算位置相關的關鍵字

  • offsetLeft、offsetTop
  • scrollLeft、scrollTop
  • clientX、clientY
  • getBoundingClientRect

滑鼠事件與觸控事件取得 clientX、clientY 的方法也不同,以 clientX 為例,可以用這樣子取得:

var clientX = e.clientX||e.touches[0].clientX;

同理,觸發事件的物件也可以用這樣取得:

var target = e.target || e.touches[0].target;


相關連結

更新記錄

  • 2024.04.17 QR Code API 改用 QuickChart。
  • 2023.01.30 在畫面右下角加入分享的按鈕,可以將目前的配置製作成網址分享。
  • 2023.01.19. Blogger 版。
  • 2023.0.115. 元件版。


沒有留言:

張貼留言

 
雄::gsyan © 2009. Design by Pocket