每天學一個jquery外掛-B站的景深
阿新 • • 發佈:2021-01-22
技術標籤:每天學一個jquery外掛javascriptjquery
每天一個jquery外掛-B站的景深
B站的景深
歪比歪比?歪比巴卜?
覺得講的不好的可以去看看大佬的文章,真的受益匪淺,真的css能做到的東西真的多,我瞭解的感覺好少啊。圖片來源從B站扣或者從下面的別的大佬做的外掛中直接下載。
我做出來的效果(當然是縮水版,不過效果實現了,也是同一個配方)
程式碼,很少全部放html裡面了
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" >
<title>B站的景深</title>
<script src="js/jquery-3.4.1.min.js"></script>
<style>
*{
margin: 0;
padding: 0;
}
#div{
width:100%;
height:160px;
position: relative;
overflow: hidden;
}
.img{
background-repeat: no-repeat;
width : 100%;
height: 100%;
position: absolute;
}
.i1{
background: url(img/1.png);
}
.i2{
background: url(img/2.png);
background-position: 40% 0%;
}
.i3{
background: url(img/3.png)
}
.i4{
background: url(img/4.png);
background-position:50% 0%;
background-size : 100% 150%;
}
.i5{
background: url(img/5.png);
background-position: 40% 0%;
}
.i6{
background: url(img/6.png);
background-position: 40% 0%;
}
</style>
</head>
<body>
<div id="div">
<div class="img i1"></div>
<div class="img i2"></div>
<div class="img i3"></div>
<div class="img i4"></div>
<div class="img i5"></div>
<div class="img i6"></div>
</div>
</body>
</html>
<script>
$(function(){
$("#div").mousemove(function(e){
var w = $(this).width();
var x = e.offsetX;
var temp1 = w/(w-x)<10?w/(w-x):10;
var temp2 = w/(x)<10?w/(x):10;
$(".i1,.i2,.i3").css({
"filter":"blur("+temp1+"px)",
"transform": "translate("+temp1+"px,0px)"
})
$(".i4,.i5,.i6").css({
"filter":"blur("+temp2+"px)",
"transform": "translate("+temp2+"px,0px)"
})
})
})
</script>
來個直觀的分解動作,我們看到的景深到底是哪些部分組成的
- 會像ps的高斯模糊一樣有規律的逐個模糊
- 並且會有鏡頭感,就是圖片朝著不同方向移動
然後用js的語言就是這樣的
- 根據滑鼠移動作為驅動事件mousenove
- 然後裡面的深淺的感覺是多個png圖片疊加在一起的效果(看原始碼~)
- 控制模糊情況用filter:blur(0px),這個引數,越大越模糊
- 控制背景圖左右移動用transform: translate(x,y),控制x來移動div達到背景圖左右挪動的效果
- 此外根據測試效果可知,裡面的三張圖片先清晰再模糊然後,以不同的步幅向左挪動,外面三張相反
- 所以我們要挨個寫控制的比例,不過我偷懶,就把前三張和後三張當成倆物件寫的,所以可能你就只有前後感,沒有層次感,因為即使模糊了前三張或者後三張也是一起模糊和移動,不過要實現效果,就設定給每個圖片比例都不一樣,然後根據滑鼠挪動比例的變化的效果引數就好了。
- 完事,洗澡,碎覺~