A pen for #pastelFlowersWeekend Move mouse touch/swipe to change perspective.
The post -- http://codepen.io/tmrDevelops/blog/pastel-bouquet
The collection -- http://codepen.io/collection/XyrpdQ/
A Pen by Nate Wiley on CodePen.
A pen for #pastelFlowersWeekend Move mouse touch/swipe to change perspective.
The post -- http://codepen.io/tmrDevelops/blog/pastel-bouquet
The collection -- http://codepen.io/collection/XyrpdQ/
A Pen by Nate Wiley on CodePen.
var flowers = []; | |
var maxFlowers = 100; | |
var w = window.innerWidth; | |
var h = window.innerHeight; | |
var flowerIndex = 0; | |
var x = tx = window.innerWidth/2; | |
var y = ty = window.innerHeight/2; | |
function random(min, max){ | |
return Math.random() * (max - min) + min | |
} | |
function Flower(){ | |
this.size = random(5, 40); | |
this.petals = random(5, 6); | |
this.petalColor = "hsl("+random(0, 360)+", 40%, 70%)"; | |
this.centerColor = "rgb(124, 86, 34)"; | |
this.direction = Math.random() > .5 ? "right" : "left"; | |
this.x = this.origX = 0; | |
this.y = this.origY = 0; | |
this.vx = this.ovx = random(-10, 10); | |
this.vy = this.ovy = random(-10, -3); | |
this.id = "dat-flower-" + flowerIndex; | |
this.alpha = 0; | |
flowerIndex++; | |
this.life = 0; | |
this.maxLife = random(100,200); | |
this.flower = $("<div />", { | |
class: "flower", | |
id: "dat-flower-" + flowerIndex | |
}).css({ | |
height: this.size, | |
width: this.size, | |
background: this.centerColor, | |
top: window.innerHeight + 300, | |
left: random(0, (window.innerWidth - this.size)), | |
opacity: 0, | |
webkitTransform: "translate3d(0,0,-500px)", | |
transform: "translate3d(0,0,-500px)", | |
}); | |
for(var i=0; i<this.petals; i++){ | |
var rotate = (i + 1) * (360/this.petals); | |
var translateY = (this.size - (this.size * .2)); | |
var petal = $("<div />", { | |
class: "petal", | |
}).css({ | |
backgroundColor: this.petalColor, | |
webkitTransform: "rotate(" + rotate + "deg) translateY("+ translateY +"px)", | |
transform: "rotate(" + rotate + "deg) translateY("+ translateY +"px)", | |
opacity: "inherit" | |
}); | |
if(this.direction == "right"){ | |
petal.css({ | |
borderBottomRightRadius: "50%", | |
borderTopRightRadius: "50%", | |
}); | |
} else { | |
petal.css({ | |
borderBottomLeftRadius: "50%", | |
borderTopLeftRadius: "50%", | |
}); | |
} | |
this.flower.append(petal); | |
} | |
$("body").append(this.flower); | |
this.flower = $("#" + this.id); | |
} | |
Flower.prototype.reset = function(){ | |
this.x = this.origX; | |
this.y = this.origY; | |
this.vx = this.ovx; | |
this.vy = this.ovy; | |
this.z = -1000; | |
this.life = 0; | |
this.alpha = 0; | |
} | |
Flower.prototype.draw = function(){ | |
this.flower.css({ | |
webkitTransform: "translate3d("+this.x+"px, "+this.y+"px, "+this.z+"px)", | |
transform: "translate3d("+this.x+"px, "+this.y+"px, "+this.z+"px)", | |
opacity: this.alpha | |
}); | |
this.update(); | |
}; | |
Flower.prototype.update = function(){ | |
if(this.life >= this.maxLife){ | |
this.reset(); | |
} else { | |
this.x += this.vx; | |
this.y += this.vy; | |
this.vy += .01; | |
this.z += 12; | |
this.alpha += .1; | |
this.life++; | |
} | |
}; | |
for(var i=0; i<maxFlowers; i++){ | |
flowers.push( new Flower() ); | |
} | |
function anim(){ | |
for(var i in flowers){ | |
var f = flowers[i]; | |
f.draw(); | |
} | |
camera(); | |
requestAnimationFrame(anim); | |
} | |
function camera(){ | |
if(Math.abs(tx - x) > .1 && Math.abs(ty - y) > .1){ | |
x += (tx - x) * .05; | |
y += (ty - y) * .05; | |
$("body").css({ | |
perspectiveOrigin: x + "px " + y + "px" | |
}) | |
} | |
} | |
function touches(e) { | |
var touches = e.touches; | |
var newX, newY; | |
if(touches){ | |
console.log(touches); | |
newX = touches[0].clientX; | |
newY = touches[0].clientY; | |
} else { | |
newX = e.clientX; | |
newY = e.clientY; | |
} | |
tx = (newX - (window.innerWidth/2)) * 3; | |
ty = (newY - (window.innerHeight/2)) * 3; | |
e.preventDefault(); | |
}; | |
window.addEventListener("mousemove", touches); | |
window.addEventListener("touchstart", touches); | |
window.addEventListener("touchmove", touches); | |
$(window).on("mouseleave", function(e){ | |
tx = window.innerWidth/2; | |
ty = window.innerHeight/2; | |
}) | |
anim(); |
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> |
html, body { | |
height: 100%; | |
} | |
body { | |
perspective: 600px; | |
perspective-origin: center center; | |
background: #111; | |
overflow: hidden; | |
&:after { | |
content: "#pastelFlowersWeekend"; | |
color: rgba(255, 255, 255, .8); | |
text-shadow: 0 1px 0 rgba(0,0,0,.2); | |
position: absolute; | |
padding: 5px; | |
bottom: 0; | |
width: 100%; | |
text-align: center; | |
font-size: 14px; | |
} | |
} | |
.flower { | |
border-radius: 50%; | |
position: absolute; | |
opacity: 0; | |
.petal { | |
width: inherit; | |
height: inherit; | |
position: absolute; | |
opacity: 0; | |
} | |
} |