Horizontal Scrolling Theater|互動效果豐富的橫向捲動電影院

更新於 發佈於 閱讀時間約 3 分鐘

簡介

以前就想過要做一個展示電影的頁面,這次使用 Vue 3 搭配 GSAP,並結合自己收藏的 46 部藍光電影所做成的 API 做串接,達成能夠橫向捲動的電影購物頁面。實作上,除了藉由 CSS 屬性 `relative` 搭配 GSAP 來調整元素的 `left` 值來實現橫向捲動的功能,另外在點擊「加入購物車」按鈕時,透過抓取當下電影封面位置和設計移動軌跡,做出漂亮的放入購物車動畫,以及使用 Vue 的 `watch` API 監視購物車資料,從購物車新增或移除電影時,加上購物車圖示縮小 20% 的反饋;這些在開發過程中不斷優化的互動效果,在最後整合到一起時,產生了驚艷的使用體驗。

外觀與互動設計

  • 加入水平捲動功能,並在載入網頁時以動畫展示作為操作提示
  • 使用淺灰色作為電影卡片底色,持久凝視不眩光
  • 對電影標題、分類和敘述分別套用不同的文字大小、字重 (font weight) 和顏色,做出視覺層次 (visual hierarchy)
  • 在電影卡片封面外加上微陰影,並在鼠標碰觸卡片時,對卡片本身和卡片封面做出不同的上移距離,達到微 3D 效果
  • 將電影加入到購物車時呈現過場動畫,以及對按鈕套用「已加入購物車」的內容和樣式,讓使用體驗更加直覺順暢
  • 使用 ionicons 的購物車 icon,並且在開、關購物車頁面時,切換線條或填充的版本;以及在購物車加入或移除電影時,觸發購物車 icon 縮小 20% 的互動效果
  • 從購物車加入或移除電影時,對總金額數字做實時加總的跳動效果
  • 開啟購物車時,虛化、暗化背景,添加層次和立體感;而在購物車為空時,另外加上倒數計時器,1.6 秒後自動回到主畫面

開發紀錄

  • 將自己收藏的 46 部藍光電影製作成 JSON API
  • 使用安裝套件更為快速的套件管理系統 pnpm
  • 使用基於 Webpack 的 Vue CLI 做零配置原型建構,透過分拆 Components 進行模組化開發,以及受文章「Do you really need Vuex?」啟發,使用更加優雅的 Composition API 達到類似於 Vuex store 的跨元件狀態共享
  • 引入 normalize.css 達到跨瀏覽器的樣式重置、使用預處理器 Sass 開發外觀,以及透過 Scoped CSS 達到互不干擾的樣式封裝
  • 將鼠標碰觸互動效果以觸控設備為條件做分離,優化不同裝置上的使用體驗
  • 使用 Vue 的 `watch` API 監視金額加總,和結合 `window.requestAnimationFrame()` 方法,達成在新增或移除電影時,做出實時金額加總的功能 (跳動數字)
  • 借助 GSAP 之力:加上綁定捲動事件和設定元素 `relative` 定位,透過改變 `left` 值實現橫向捲動功能;透過點擊「加入購物車」按鈕後,取得當下電影封面位置和設計移動軌跡,達成漂亮的加入購物車動畫;使用 Vue 的 `watch` API 監視購物車資料,從購物車新增或移除電影、導致資料更新時,觸發購物車 icon 縮小 20% 的互動效果
  • 在加入電影到購物車、從購物車移除電影時,使用變數作為開關,阻擋 GSAP 動畫期間的複數操作,確保互動效果始終如期運行
  • 使用 Netlify 部署網站
為什麼會看到廣告
avatar-img
37會員
31內容數
短篇奇幻作品將不定期更新。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
Ray C的沙龍 的其他內容
我始終認為,設計與開發是一體兩面,設計本是為開發而存在,開發也是為了完成設計,兩者相輔相成、互相影響。因此在網站首頁中,使用建築圖與對設計和開發的解釋,表現自己在前端學習上,執著於兼顧清晰的設計與流暢的開發;網站設計上,我以報紙風格做為基礎,使用噪點填充背景以實現擬似紙張的質感,加入平滑滾動與...
2020 下半年在全世界仍受到冠狀病毒肆虐期間,吉卜力工作室在官網四次公開合計 24 部動畫作品、共 1,178 張高畫質劇照,表示在未觸法的情形之下可自由下載使用,並且還會持續釋出過去動畫作品的劇照。由於官網的劇照呈現方式不太友好,也未在移動裝置上做排版優化,加上分批公開的作品劇照未整合在一...
這次的專案為六角學院在 2021 年疫情期間舉辦的「程式體驗營」最終作業,其中使用了最近接觸的 Vite 作為專案開發和打包的工具,以及因為對 Utility-First CSS 頗感興趣,將 Tailwind 納入專案並初次使用它做開發...
我並非這美術設計的原創,不過得益於 Instagram 上 @uixperience 的作品參考,才實現了這優雅計算機的外觀。在互動的部分,我讓按鍵在按下時減少陰影,並加深按鍵背景的顏色,這樣就像是真的被按了下去一樣;另外,在顯示計算結果的部分,透過 JS 增減 CSS class 的方式隨時...
一開始的版本是和 Todo MVC 類似的簡易待辦事項清單,由於本身的使用需求,不斷調整和優化 Todo 清單的外觀與功能,如使用 SortableJS 做出拖拉排序、結合 LocalStorage 做出儲存機制、Markdown link 語法的支持,以及對 XSS 跨網站指令程式碼的防禦處...
我始終認為,設計與開發是一體兩面,設計本是為開發而存在,開發也是為了完成設計,兩者相輔相成、互相影響。因此在網站首頁中,使用建築圖與對設計和開發的解釋,表現自己在前端學習上,執著於兼顧清晰的設計與流暢的開發;網站設計上,我以報紙風格做為基礎,使用噪點填充背景以實現擬似紙張的質感,加入平滑滾動與...
2020 下半年在全世界仍受到冠狀病毒肆虐期間,吉卜力工作室在官網四次公開合計 24 部動畫作品、共 1,178 張高畫質劇照,表示在未觸法的情形之下可自由下載使用,並且還會持續釋出過去動畫作品的劇照。由於官網的劇照呈現方式不太友好,也未在移動裝置上做排版優化,加上分批公開的作品劇照未整合在一...
這次的專案為六角學院在 2021 年疫情期間舉辦的「程式體驗營」最終作業,其中使用了最近接觸的 Vite 作為專案開發和打包的工具,以及因為對 Utility-First CSS 頗感興趣,將 Tailwind 納入專案並初次使用它做開發...
我並非這美術設計的原創,不過得益於 Instagram 上 @uixperience 的作品參考,才實現了這優雅計算機的外觀。在互動的部分,我讓按鍵在按下時減少陰影,並加深按鍵背景的顏色,這樣就像是真的被按了下去一樣;另外,在顯示計算結果的部分,透過 JS 增減 CSS class 的方式隨時...
一開始的版本是和 Todo MVC 類似的簡易待辦事項清單,由於本身的使用需求,不斷調整和優化 Todo 清單的外觀與功能,如使用 SortableJS 做出拖拉排序、結合 LocalStorage 做出儲存機制、Markdown link 語法的支持,以及對 XSS 跨網站指令程式碼的防禦處...
你可能也想看
Google News 追蹤
Thumbnail
大家好,我是woody,是一名料理創作者,非常努力地在嘗試將複雜的料理簡單化,讓大家也可以體驗到料理的樂趣而我也非常享受料理的過程,今天想跟大家聊聊,除了料理本身,料理創作背後的成本。
Thumbnail
哈囉~很久沒跟各位自我介紹一下了~ 大家好~我是爺恩 我是一名圖文插畫家,有追蹤我一段時間的應該有發現爺恩這個品牌經營了好像.....快五年了(汗)時間過得真快!隨著時間過去,創作這件事好像變得更忙碌了,也很開心跟很多厲害的創作者以及廠商互相合作幫忙,還有最重要的是大家的支持與陪伴🥹。  
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
切換頁面卡卡有很多種原因,這裡舉的例子只針對元件太大的情境。 除了想辦法拆分外,還有一個方法就是利用 Vue 的 Async Component。
Thumbnail
自訂元件生成位置顧名思義就是可以指定部分HTML區塊渲染在特定的畫面上,即使在不同組件也能把A組件內的部分畫面,展現在B組件上,以下方程式舉例。
Thumbnail
2023 Vue直播班筆記 - 動態路由Props,接續之前的一般動態路由。分為 "寫死" 及 "彈性" 兩種。
Thumbnail
Vue Router 動態路由,假設有一個賣場,裡面有 100 個商品,我們不可能針對它們創 100 對應的路由,因此我們需要一個動態路由,利用"路徑帶參數"的方式來撈取商品的資訊。
Thumbnail
Vue Router 及 具名視圖,擺脫以往切換依賴 CSS display:none 跟 display:block 互相配合,有時還得搭配 z-index 來調整層級跟 opacity 透明度的麻煩,而 Vue Router 完美的解決了這棘手的問題,且能客製頁面想要呈現的擺飾。
Thumbnail
這系列是我在 2023 六角學院 Vue作品實戰班的筆記,筆記以本人理解的方式記錄。此篇主題為 Slot Props 進階應用 ,其中包含單筆資料、多筆資料。
Thumbnail
vocus 致力於讓創作者透過多元的變現方式展現你的創作動力,除了原有的訂閱、廣告、贊助功能,在去年正式推出了「數位商品」販售功能,讓你的創作能有更多樣化的呈現與變現方式。 為了讓創作者們能更輕鬆地上架數位商品,我們做了以下的功能更新,讓你在上架時更加順暢!
Thumbnail
第一次系列的第二彈,我來到電影院了。之前從來沒有在國外走進電影院過,想去瞧瞧跟台灣有甚麼不同,也剛好最近有想看的電影,就決定來趟電影院之旅。
Thumbnail
Swiper.js 是一個功能齊全的輪播套件,除了輪播外,也可以客製化導航按鈕和頁碼等細項。目前支持 JS、React、Vue。但是 Swiper.js Vue 版本主要由 Composition API 風格構成,此篇文章將介紹 Options API 的撰寫方式,以及如何做樣式客製化。
Thumbnail
串流大戰似乎顛覆了許多觀眾的觀影觀念,許多熱門電影如今上架串流平台的速度更快,不用出門,在串流平台上就有看不完的電影;而也仍然有許多觀眾,享受在電影院觀看大銀幕的戲院體驗。今天要來介紹一個特別的「線上+線下」觀影優惠方案:讓你到戲院不到一百塊就能看電影+ 上萬小時電影看到飽的串流平台方案。
Thumbnail
大家好,我是woody,是一名料理創作者,非常努力地在嘗試將複雜的料理簡單化,讓大家也可以體驗到料理的樂趣而我也非常享受料理的過程,今天想跟大家聊聊,除了料理本身,料理創作背後的成本。
Thumbnail
哈囉~很久沒跟各位自我介紹一下了~ 大家好~我是爺恩 我是一名圖文插畫家,有追蹤我一段時間的應該有發現爺恩這個品牌經營了好像.....快五年了(汗)時間過得真快!隨著時間過去,創作這件事好像變得更忙碌了,也很開心跟很多厲害的創作者以及廠商互相合作幫忙,還有最重要的是大家的支持與陪伴🥹。  
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
切換頁面卡卡有很多種原因,這裡舉的例子只針對元件太大的情境。 除了想辦法拆分外,還有一個方法就是利用 Vue 的 Async Component。
Thumbnail
自訂元件生成位置顧名思義就是可以指定部分HTML區塊渲染在特定的畫面上,即使在不同組件也能把A組件內的部分畫面,展現在B組件上,以下方程式舉例。
Thumbnail
2023 Vue直播班筆記 - 動態路由Props,接續之前的一般動態路由。分為 "寫死" 及 "彈性" 兩種。
Thumbnail
Vue Router 動態路由,假設有一個賣場,裡面有 100 個商品,我們不可能針對它們創 100 對應的路由,因此我們需要一個動態路由,利用"路徑帶參數"的方式來撈取商品的資訊。
Thumbnail
Vue Router 及 具名視圖,擺脫以往切換依賴 CSS display:none 跟 display:block 互相配合,有時還得搭配 z-index 來調整層級跟 opacity 透明度的麻煩,而 Vue Router 完美的解決了這棘手的問題,且能客製頁面想要呈現的擺飾。
Thumbnail
這系列是我在 2023 六角學院 Vue作品實戰班的筆記,筆記以本人理解的方式記錄。此篇主題為 Slot Props 進階應用 ,其中包含單筆資料、多筆資料。
Thumbnail
vocus 致力於讓創作者透過多元的變現方式展現你的創作動力,除了原有的訂閱、廣告、贊助功能,在去年正式推出了「數位商品」販售功能,讓你的創作能有更多樣化的呈現與變現方式。 為了讓創作者們能更輕鬆地上架數位商品,我們做了以下的功能更新,讓你在上架時更加順暢!
Thumbnail
第一次系列的第二彈,我來到電影院了。之前從來沒有在國外走進電影院過,想去瞧瞧跟台灣有甚麼不同,也剛好最近有想看的電影,就決定來趟電影院之旅。
Thumbnail
Swiper.js 是一個功能齊全的輪播套件,除了輪播外,也可以客製化導航按鈕和頁碼等細項。目前支持 JS、React、Vue。但是 Swiper.js Vue 版本主要由 Composition API 風格構成,此篇文章將介紹 Options API 的撰寫方式,以及如何做樣式客製化。
Thumbnail
串流大戰似乎顛覆了許多觀眾的觀影觀念,許多熱門電影如今上架串流平台的速度更快,不用出門,在串流平台上就有看不完的電影;而也仍然有許多觀眾,享受在電影院觀看大銀幕的戲院體驗。今天要來介紹一個特別的「線上+線下」觀影優惠方案:讓你到戲院不到一百塊就能看電影+ 上萬小時電影看到飽的串流平台方案。