Drag Papers Proposal πŸ’•

Drag Papers Proposal.


 In this Blog i will show you how you can create this effect 


DEMO LINK for PC πŸ‘‰πŸ‘‰πŸ‘‰ Drag paper proposal (codepen.io)

                    DEMO LINK for mobile πŸ‘‰πŸ‘‰πŸ‘‰ https://g196k8.csb.app/

 

first you have to create an html files as below :

index.html :

<!DOCTYPE html>
<html lang="en" >
<head>
  <meta charset="UTF-8">
  <title>CodePen - Drag Papers ❤️</title>
  <link rel='stylesheet' href='https://fonts.googleapis.com/css2?family=Short+Stack&amp;family=Homemade+Apple&amp;display=swap'><link rel="stylesheet" href="./style.css">

</head>
<body>
<!-- partial:index.partial.html -->
<!-- A pen by Developer Rahul  -->
<div class="paper heart">

</div>

  
<div class="paper image">
  <p> and I fallen in</p>
    <p>Love with You 😍 </p>
   <img src="https://iili.io/HSzXpzg.jpg" />
</div>

<div class="paper image">
  <p</p>
  <img src="https://iili.io/HSzXbmF.jpg" />
</div>

<div class="paper image">
  <p>How can be </p>
   <p> someone so cute ❤️ </p>

  <img src="https://iili.io/HSzXyXa.jpg" />
</div>



<div class="paper red">
<p class="p1"> and My Favorite</p>
<p class="p2">Person 😍</p>
</div>

<div class="paper">
<p class="p1">You are Cute </p>
  <p class="p1">Amazing <span style="color: red !important;">❤️</span></p>
</div>

<div class="paper">
<p class="p1">Drag the papers to move!</p>
</div>
<!-- partial -->
  <script  src="./script.js"></script>

</body>
</html>

after that you need to add style.css :

@import url('https://fonts.googleapis.com/css2?family=Zeyada&display=swap');




body {
  height: 100vh;
  display: flex;
  align-items: center;
  justify-content: center;

  background-size: 1000px;
  background-image: url("https://www.psdgraphics.com/wp-content/uploads/2022/01/white-math-paper-texture.jpg");
  background-position: center center;
}

.paper {
  background-image: url("https://i0.wp.com/textures.world/wp-content/uploads/2018/10/2-Millimeter-Paper-Background-copy.jpg?ssl=1");
  background-size: 500px;
  background-position: center center;
  padding: 20px 100px;
  //min-width: 800px;
  
  transform: rotateZ(-5deg);
  box-shadow: 1px 15px 20px 0px rgba(0,0,0,0.5);
  
  position: absolute;
}

.paper.heart {
  position: relative;
  width: 200px;
  height: 200px;
  padding: 0;
  border-radius: 50%;
}

.paper.image {
  padding: 10px;
}
.paper.image p {
  font-size: 30px;
}

img {
  max-height: 200px;
  width: 100%;
  user-select: none;
}

.paper.heart::after {
  content: "";
  background-image: url('https://cdn.pixabay.com/photo/2016/03/31/19/25/cartoon-1294994__340.png');
  width: 100%;
  height: 100%;
  position: absolute;
  top: 0;
  left: 0;
  background-size: 150px;
  background-position: center center;
  background-repeat: no-repeat;
  opacity: 0.6;
}

.paper.red {
/*   filter: hue-rotate(90deg); */
}
.paper:nth-of-type(3n) {
  background-position: left top;
}
.paper:nth-of-type(3n) {
/*   filter: hue-rotate(200deg); */
}

p {
  font-family: 'Zeyada';
  font-size: 50px;
  color: rgb(0,0,100);
  opacity: 0.75;
  user-select: none;
  
  // filter: drop-shadow(2px 1.5px 1px rgba(0,0,105,0.9));
}
after that the most important part adding javascript :If you want to work this effect on mobile use script.js for mobile :script.js (Mobile ) :
let highestZ = 1;
class Paper {
holdingPaper = false;
touchStartX = 0;
touchStartY = 0;
touchMoveX = 0;
touchMoveY = 0;
touchEndX = 0;
touchEndY = 0;
prevTouchX = 0;
prevTouchY = 0;
velX = 0;
velY = 0;
rotation = Math.random() * 30 - 15;
currentPaperX = 0;
currentPaperY = 0;
rotating = false;
init(paper) {
paper.addEventListener("touchmove", (e) => {
e.preventDefault();
if (!this.rotating) {
this.touchMoveX = e.touches[0].clientX;
this.touchMoveY = e.touches[0].clientY;
this.velX = this.touchMoveX - this.prevTouchX;
this.velY = this.touchMoveY - this.prevTouchY;
}
const dirX = e.touches[0].clientX - this.touchStartX;
const dirY = e.touches[0].clientY - this.touchStartY;
const dirLength = Math.sqrt(dirX * dirX + dirY * dirY);
const dirNormalizedX = dirX / dirLength;
const dirNormalizedY = dirY / dirLength;
const angle = Math.atan2(dirNormalizedY, dirNormalizedX);
let degrees = (180 * angle) / Math.PI;
degrees = (360 + Math.round(degrees)) % 360;
if (this.rotating) {
this.rotation = degrees;
}
if (this.holdingPaper) {
if (!this.rotating) {
this.currentPaperX += this.velX;
this.currentPaperY += this.velY;
}
this.prevTouchX = this.touchMoveX;
this.prevTouchY = this.touchMoveY;
paper.style.transform = `translateX(${this.currentPaperX}px) translateY(${this.currentPaperY}px) rotateZ(${this.rotation}deg)`;
}
});
paper.addEventListener("touchstart", (e) => {
if (this.holdingPaper) return;
this.holdingPaper = true;
paper.style.zIndex = highestZ;
highestZ += 1;
this.touchStartX = e.touches[0].clientX;
this.touchStartY = e.touches[0].clientY;
this.prevTouchX = this.touchStartX;
this.prevTouchY = this.touchStartY;
});
paper.addEventListener("touchend", () => {
this.holdingPaper = false;
this.rotating = false;
});
// For two-finger rotation on touch screens
paper.addEventListener("gesturestart", (e) => {
e.preventDefault();
this.rotating = true;
});
paper.addEventListener("gestureend", () => {
this.rotating = false;
});
}
}
const papers = Array.from(document.querySelectorAll(".paper"));
papers.forEach((paper) => {
const p = new Paper();
p.init(paper);
});

script.js ( Pc or Desktop ):
let highestZ = 1;

class Paper {
  holdingPaper = false;
  mouseTouchX = 0;
  mouseTouchY = 0;
  mouseX = 0;
  mouseY = 0;
  prevMouseX = 0;
  prevMouseY = 0;
  velX = 0;
  velY = 0;

Comments

Popular posts from this blog

Galaxy Proposal😻😻

Music Player - 3D