iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 3
0
Modern Web

師父領進門 修行在個人系列 第 19

19–JS挑戰(14)–Video Speed Controller UI +Countdown Clock

  • 分享至 

  • xImage
  •  

快結束了,再接再厲,準備考試跟繼續鐵人戰有點累,但希望可以趁年底撐過去!

  1. Video Speed Controller UI
  • 慢慢掌握到了一些東西,但都是看著做,時間好像不夠自己實際發想,可能所有的債等寒假再來一次。
  • toFixed()
  • 記得很多東西要自己加單位, ex: px, % ,em 等等
  const speed = document.querySelector('.speed')
  const speedBar = speed.querySelector('.speed-bar')
  const video = document.querySelector('.flex')

  function control(e) {
    const Y = e.pageY - this.offsetTop
    const percent = Y / this.offsetHeight
    const min = 0.4 , max = 4.0
    const height = Math.round((percent)* 100) + '%'
    const rate = percent * (max - min) + min

    speedBar.style.height = height
    speedBar.textContent = rate.toFixed(2)+ "x"
    video.playbackRate = rate
  }
  speed.addEventListener('mousemove',control)
  speed.addEventListener('click',control)

  1. Countdown Clock
  • document.title 就是分頁的標題
  • 時間相關使用和debug 中間使用clearInterval 目的有兩個:
    • 先除掉其他timer
    • 不要讓他變成負
let countdown  //之後才方便clearInterval
const timeDisplay = document.querySelector('.display__time-left')
const endTime = document.querySelector('.display__end-time')
const buttons = document.querySelectorAll('[data-time]')

function timer(seconds){
  //要先除掉其他的timer!!!
  clearInterval(countdown)
  const now = Date.now()
  const then = now + seconds * 1000
  displayTimeLeft(seconds)
  displayEndTime(then)

  countdown = setInterval(() => {
    const secondLeft = Math.round((then - Date.now())/1000)
      if (secondLeft < 0 ){
        clearInterval(countdown)
        return
      }
      displayTimeLeft(secondLeft);
  },1000)
}

function displayTimeLeft(seconds){
  const mins =  Math.floor(seconds/ 60)
  const remainseconds = seconds % 60
  const display = `${mins}:${remainseconds < 10? '0':''}${remainseconds}`
  timeDisplay.textContent = display
  document.title = display
}

function displayEndTime(timestamp){
  const end = new Date(timestamp)
  const hours = end.getHours()
  const mins = end.getMinutes()
  endTime.textContent = `Be back at ${hours}:${mins < 10? '0':''}${mins}`
}

function startTimer(){
  const seconds = parseInt(this.dataset.time)
  timer(seconds)
}

buttons.forEach(button => button.addEventListener('click', startTimer))
document.customForm.addEventListener('submit', function(e){
  e.preventDefault()
  const mins = this.minutes.value
  timer(mins * 60)
  this.reset
})

上一篇
18–JS挑戰–(13)–Cool Dropdown Navbar + Click & Drag
下一篇
20–JS挑戰–(15)–手機定位 + 打地鼠
系列文
師父領進門 修行在個人30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言