js 랜덤 원과 직사각형 기능 구현
1. 노드 운영 버전
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>DOM </title>
</head>
<style>
*{
margin: 0;padding: 0;
}
html,body,.box{
width: 100%;height: 100%;
}
#content{
background: #f5f5f5;
}
.circle{
border-radius: 50%;position: absolute;
}
.rect{
position: absolute;
}
.btn{
position: fixed;top: 0;left: 0;
}
</style>
<body>
<div id="content" class="box"></div>
<div class="btn">
<button id="createCircle"> </button>
<button id="createRect"> </button>
</div>
</body>
<script>
class Public{
constructor(){
this.x = this.randomR(0,1800);
this.y = this.randomR(40,806);
this.color = this.randomColor();
this.r = this.randomR(10,20);
}
randomR(min,max){//
return parseInt(Math.random() * (max - min) + min);
}
randomColor(){//
let rgba = `rgba(${this.randomR(0,255)},${this.randomR(0,255)},${this.randomR(0,255)},1)`;
return rgba;
}
}
class Circle extends Public{
constructor(){
super();
}
circle(){
const {r,x,y,color} = this;
const contentElem = document.getElementById("content");
let declareElem = document.createElement("div");
declareElem.className = "circle";
declareElem.style.width = `${r * 2}px`;
declareElem.style.height = `${r * 2}px`;
declareElem.style.background = color;
declareElem.style.top = `${y}px`;
declareElem.style.left = `${x}px`;
contentElem.appendChild(declareElem);
}
}
class Rect extends Public{
constructor(){
super();
}
rect(){
const {x,y,color} = this;
const contentElem = document.getElementById("content");
let declareElem = document.createElement("div");
declareElem.className = "rect";
declareElem.style.width = `${this.randomR(20,30)}px`;
declareElem.style.height = `${this.randomR(20,30)}px`;
declareElem.style.background = color;
declareElem.style.top = `${y}px`;
declareElem.style.left = `${x}px`;
contentElem.appendChild(declareElem);
}
}
document.getElementById("createCircle").onclick = () => {
new Circle().circle();
}
document.getElementById("createRect").onclick = () => {
new Rect().rect();
}
</script>
</html>
2, 마우스 드래그 버전 (직사각형 버전과 유사)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title> </title>
</head>
<style>
*{
margin: 0;padding: 0;
}
html,body,.box{
width: 100%;height: 100%;
}
#content{
background: #f5f5f5;
}
.circle{
border-radius: 50%;position: absolute;
}
</style>
<body>
<div id="content" class="box"></div>
</body>
<script>
class Public{
constructor(x,y){
this.x = x;
this.y = y;
this.color = this.randomColor();
this.r = this.randomR(10,20);
}
randomR(min,max){//
return parseInt(Math.random() * (max - min) + min);
}
randomColor(){//
let rgba = `rgba(${this.randomR(0,255)},${this.randomR(0,255)},${this.randomR(0,255)},1)`;
return rgba;
}
}
class Circle extends Public{
constructor(x,y){
super(x,y);
}
circle(){
const {r,x,y,color} = this;
const contentElem = document.getElementById("content");
let declareElem = document.createElement("div");
declareElem.className = "circle";
declareElem.style.width = `${r * 2}px`;
declareElem.style.height = `${r * 2}px`;
declareElem.style.background = color;
declareElem.style.top = `${y}px`;
declareElem.style.left = `${x}px`;
contentElem.appendChild(declareElem);
setTimeout(() => {
declareElem.remove();
},100);
}
}
document.getElementById("content").onmousemove = (e) => {
const {clientX,clientY} = e || window.event;
new Circle(clientX,clientY).circle();
}
</script>
</html>
3. canvas 버전
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
#canvas{margin: 0 auto;background: #000;box-shadow: 0 0 10px #000;}
</style>
</head>
<body>
<canvas id="canvas"></canvas>
</body>
<script>
var _={
random:function(start,stop){
return parseInt(Math.random()*(stop-start)+start);
}
}
window.onload=function(){
const canvas=document.getElementById("canvas");
const ctx=canvas.getContext("2d");
canvas.width="1000";
canvas.height="600";
class ball{
constructor(x,y,color){
this.x=x;
this.y=y;
this.r=40;
this.color=color;
}
render(){
ctx.save();
ctx.beginPath();
ctx.arc(this.x,this.y,this.r,0,Math.PI*2);
ctx.fillStyle=this.color;
ctx.fill();
ctx.restore();
}
}
class moveBall extends ball{
constructor(x,y,color){
super(x,y,color);
this.dx=_.random(-5,5);
this.dy=_.random(-5,5);
this.dr=_.random(1,3);
}
updated(){
this.x+=this.dx;
this.y+=this.dy;
this.r-=this.dr;
if(this.r<=0){
this.r=0;
}
}
}
let BallArr=[];
let Color=["red","green","blue","white","orange"];
canvas.addEventListener("mousemove",function(e){
let Ball=new moveBall(e.offsetX,e.offsetY,Color[_.random(0,Color.length-1)]);
BallArr.push(Ball);
});
setInterval(()=>{
ctx.clearRect(0,0,canvas.width,canvas.height);
for(let i=0;i<BallArr.length;i++){
BallArr[i].render();
BallArr[i].updated();
}
},50);
}
</script>
</html>
이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[2022.04.19] 자바스크립트 this - 생성자 함수와 이벤트리스너에서의 this18일에 this에 대해 공부하면서 적었던 일반적인 함수나 객체에서의 this가 아닌 오늘은 이벤트리스너와 생성자 함수 안에서의 this를 살펴보기로 했다. new 키워드를 붙여 함수를 생성자로 사용할 때 this는...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.