iT邦幫忙

2021 iThome 鐵人賽

DAY 8
0
Modern Web

30天每天寫網站系列 第 8

Day8-滾動視差(上)_前有文字

  • 分享至 

  • xImage
  •  

今天試著寫了滾動視差的網站
滾動視差主要是靠東西不同的滾動速度來做到前後落差的感覺
先看成品
https://i.imgur.com/IA2gHkW.gif

先做最上面的文字跟刷子的部分

<div class="bg">
    <div class="scroll_thing" style="display: grid; justify-items: center;">
        <span class="brush">
            <i class="fas fa-brush" style="font-size: 128px;"></i>
            <div class="text text1">滾動看看網站</div>
        </span>
    </div>
</div>

先幫bg背景加上一個高度讓頁面可以滾動,然後幫他加一個圖片背景

.bg{
    height: 400vh;
    background-image: url("bg1.jpeg");
    background-size: cover;
}

加上background-size: cover; 讓背景圖片可以填滿整個畫面,避免圖片重複

https://i.imgur.com/jwZ2eAJ.gif
前面有提到,滾動視差是靠前後不同的滾動速度做出來的效果,所以這邊我們要先讓背景不要動

background-attachment: fixed; 可以讓背景固定在原地不動

https://i.imgur.com/aMe44Pu.gif

這樣子就已經有視差滾動的雛型了,後面不動前面動
但我們再加一些東西讓畫面有趣一點

先讓刷子的滾動方向跟滑鼠滾動方向相同~
方法就是跟做卷軸時的拉桿一樣

var scroll_ = 0;  //滾動多少
$(window).scroll(function () {
    scroll_ = $(this).scrollTop()
    $('.brush').attr("style", "top:" + scroll_ + "px");
})

https://i.imgur.com/6fyedzg.gif
因為我們的刷子跟滾動速度完全相同所以看起來是完全沒在動的
這裡我們幫刷子加一點速度

用的是data-自訂屬性

在brush的HTML中加上data-speed="1.3"

然後在JS中把讓brush滾動的這一行改成下面這樣

$('.brush').attr("style", "top:" + scroll_* $('.brush').data('speed') + "px");

把滾動的數值乘上我們剛剛加上的速度,讓滾動的速度增加
https://i.imgur.com/EJYGVdd.gif

brush的滾動速度>捲軸滾動速度後,就可以做出滾動後離開畫面的效果
但因為是往下滾動的關係,如果brush持續存在,內容就會被一直往下增加,所以我們需要讓brush滾動到一個距離後便從畫面中消失

這邊先在brush的CSS中加上display: block; 然後新增一個CSS

.showout {
    display: none;
}

這邊需要把這個CSS放在最下面,以免讀取時先讀到他再讀到brush的CSS,他就會沒有作用

然後再到JS加上判別式

if (scroll_ > 1080) {
    $('.brush').addClass("showout");
} else {
    $('.brush').attr("style", "top:" + scroll_* $('.brush').data('speed') + "px");
    $('.brush').removeClass("showout")
}

利用.addClass()這個函式,把剛剛寫好的showout加到brush的class中,讓滾動超過1080時brush消失,反之再把showout「remove掉」就可以再出現了
https://i.imgur.com/9bYItHj.gif

這邊我幫下面的文字也做了一點動畫,讓他有消失再回來的效果
https://i.imgur.com/KOLbS3w.gif

然後回到HTML在bg中scroll_thing外面加上三個div,分別放字

<div class="text text2">現在</div>
<div class="text text3">可以</div>
<div class="text text4">再滾回去了</div>

這邊我想做的是滾動到指定位置後給他出現變化的部分

先在CSS中先把位置排好後設上display: none;
https://ithelp.ithome.com.tw/upload/images/20210923/20141991P6Vdolm4mP.jpg

一樣新增一個CSS

.showin {
    display: block;
}

到JS中一樣是以滾動距離加上.addClass()

if (scroll_ > 1300) {
    $('.text2').addClass("showin")
} else $('.text2').removeClass("showin")
if (scroll_ > 1500) {
    $('.text3').addClass("showin")
} else $('.text3').removeClass("showin")
if (scroll_ > 1700) {
    $('.text4').addClass("showin")
} else $('.text4').removeClass("showin")

記得要加上滾動後他也會往下的這行,不然即使他showin了,也已經被滑上去看不到了

for (let i = 2; i <= 4; i++) {
    $('.text' + i).attr("style", "top:" + scroll_ + "px");
}

https://i.imgur.com/ZeOgQpy.gif

接下來我們把旁邊的捲軸藏起來

*::-webkit-scrollbar {
    width: 0px;
}

https://i.imgur.com/p7vMr3B.gif

把捲軸藏起來後我們簡易的視差滾動網站就完成啦!!
球球的部分明天做介紹


上一篇
Day7-網站閱讀進度條(下)_捲軸包捲軸
下一篇
Day9-滾動視差(下)_後有圖樣
系列文
30天每天寫網站30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言