WeBike v3
by PhilQ
HTML
<div id="win">
<div id="inner-win">
<div id="scale">
<div id="z0">
<div id="clouds1" class="clouds1"></div>
<div id="clouds2" class="clouds1"></div>
<div id="clouds3" class="clouds2"></div>
<div id="clouds4" class="clouds2"></div>
</div>
<div id="z1">
<div class="skyline"></div>
<div class="skyline"></div>
<div class="skyline half"></div>
<div class="silhouet_ij"></div>
<div class="silhouet_noord_first"></div>
<div class="silhouet_noord"></div>
<div class="silhouet_noord"></div>
<div class="silhouet_noord"></div>
</div>
<div id="z2">
<div class="westertoren"></div>
<div class="pont"></div>
<!--
<div class="eye"></div>
<div class="toren"></div>
//-->
<div class="ransdorp"></div>
</div>
<div id="z3">
<div class="houses half"></div>
<div class="bridge1"></div>
<div class="houses"></div>
<div class="bridge2"></div>
<div class="station"></div>
<div class="haven1"></div>
<div class="haven2"></div>
<!--
<div class="cafe-de-pont"></div>
//-->
<div class="bomen1"></div>
<div class="koe3b"></div>
<div class="koe1b"></div>
<div class="koe2"></div>
<div class="koe3"></div>
<div class="koe1"></div>
<div class="koe2b"></div>
<div class="durgerdam"></div>
<div class="bomen2"></div>
<div class="koe2"></div>
<div class="koe1b"></div>
<div class="koe3b"></div>
<div class="koe1"></div>
<div class="koe2b"></div>
<div class="koe3"></div>
</div>
<div id="z4"></div>
<div id="z5">
<div class="kade half"></div>
<div class="bridge1"></div>
<div class="kade"></div>
<div class="bridge2"></div>
<div class="kade"></div>
<div class="gras1"></div>
<div class="gras2"></div>
</div>
<div id="z6">
<div class="water1"></div>
</div>
<div id="z7">
<div class="waterback"></div>
</div>
<div id="z8">
<div...
SCSS
*, *::before, *::after {
margin: 0;
padding: 0;
box-sizing: border-box;
}
html, body {
width: 100%;
height: 100vh;
}
body {
background-color: #50b9e1;
background-image: linear-gradient(to bottom, rgb(80, 184, 225) 0%, rgb(168, 225, 255) 60%);
}
#win {
z-index: 1;
position: absolute;
top: 0px;
width: 100%;
// min-width: 960px;
left: 0px;
height: 100%;
// min-height: 650px;
background-image: radial-gradient(center bottom, ellipse cover, rgba(168, 225, 255, 1) 40%, rgba(168, 225, 255, 0));
overflow: hidden;
}
#inner-win {
float: left;
width: 100%;
height: 100%;
/* padding-top: 150px; */
overflow: hidden;
}
#scale {
position: absolute;
width: 100%;
height: 100%;
transform: scale(0.5);
transform-origin: 0% 100%;
transform-style: preserve-3d;
& > div {
position: absolute;
height: 100%;
/*
width: 100%;
top: 0px;
left: 0px;
right: 0px;
bottom: 0px;
*/
white-space: nowrap;
& > div {
float: none !important;
display: inline-block;
}
}
}
#z0 {
z-index: 0;
}
#z1 {
z-index: 1;
}
#z2 {
z-index: 2;
}
#z3 {
z-index: 3;
}
#z4 {
z-index: 4;
}
#z5 {
z-index: 5;
}
#z6 {
z-index: 6;
}
#z7 {
display: none;
z-index: 7;
}
#z8 {
display: none;
z-index: 8;
filter: blur(3px) sepia(75%) hue-rotate(180deg) brightness(0.45);
/* grayscale(25%) */
}
.clouds1 {
position: absolute;
top: 0px;
left: 0px;
width: 734px;
height: 104px;
background: url('https://www.webikeamsterdam.com/img/v2/clouds1.png') no-repeat bottom left transparent;
background-size: contain;
background-origin: content-box;
background-clip: content-box;
}
.clouds2 {
position: absolute;
top: 0px;
left: 0px;
width: 675px;
height: 192px;
background: url('https://www.webikeamsterdam.com/img/v2/clouds2.png') no-repeat bottom left transparent;
background-size: contain;
background-origin: content-box;
background-clip: content-box;
}
#clouds1 {
top: -550px;
}
#clouds2 {
top: -250px;
}
#clouds3 {
top: -350px;
}
#clouds4...
JavaScript
var scrW = 0,
cloudSpeed = {
'clouds1': 20,
'clouds2': 40,
},
timer_pont,
scrollSpeed = 1000/960, /* ms/px */
maxBgPos = 0;
$(window).load(function(){
var _w = $(window).width();
scrW = (screen.width) ? Math.max(screen.width, _w) : _w;
/* == Stretch waterfront == */
var maxWidth = scrW;
$("#z2, #z3, #z4, #z5").each(function() {
var _w = $(this).width();
if ( _w > maxWidth ) {
maxWidth = _w;
}
});
$("#z6").width( maxWidth * 1.2 );
var matches = $('#scale').css('transform').match(/matrix\(\s*(-?\d*\.?\d*),\s*(-?\d*\.?\d*),\s*(-?\d*\.?\d*),\s*(-?\d*\.?\d*),\s*(-?\d*\.?\d*),\s*(-?\d*\.?\d*)\)/);
var _scale = parseFloat( matches[1] );
if (0 == _scale) {
_scale = 1;
}
var _z5_w = $('#z5').width();
console.log('scrW', scrW);
console.log('_scale', _scale);
console.log('_z5_w', _z5_w);
maxBgPos = ( scrW / _scale ) - _z5_w + (2 / _scale);
console.log('maxBgPos', maxBgPos);
});
function animateBackground(curPos, nextPos, speed) {
/* == Move panorama == */
nextPos = Math.max(nextPos, maxBgPos);
var animTime = (speed=="fast")? 0: Math.abs(nextPos-curPos) * scrollSpeed;
/*
console.log("z2-5: "+curPos+" --> "+nextPos);
console.log("z1: --> "+(nextPos*0.6));
console.log("z6: --> "+(nextPos*1.2));
*/
$("#z1").animate({left: ""+(nextPos*0.6)+"px"},{
duration: animTime,
easing: "swing",
queue: false
});
$("#z6").animate({left: ""+(nextPos*1.2)+"px"},{
duration: animTime,
easing: "swing",
queue: false
});
$("#z2, #z3, #z4, #z5").animate( { left: ""+nextPos+"px" }, {
duration: animTime,
easing: "swing",
complete: function() {
// inNavAnim = false;
}
});
}
var vaarPont = function(){
var $pont = $(".pont");
var vars = ($pont.hasClass("heen"))? {'margin-left': '2300px', 'margin-right': '930px'}: {'margin-left': '3230px', 'margin-right': '0px'};
$pont.toggleClass("heen").animate(vars, {
duration: 10000,
easing: "swing",
complete: function() {
timer_pont =...