- Frederick Philips Brooks
Mythical Man-Month 저자
728x90
반응형
마우스 이펙트 01번 입니다.
완성된 예제 입니다.
HTML 코드입니다.
<body class="img01 bg01 font10">
<header id="header">
<h1>Javascript Mouse Effect01</h1>
<p>마우스 이펙트 - 마우스 따라다니기</p>
<ul>
<li class="active"><a href="mouseEffect01.html">1</a></li>
<li><a href="mouseEffect02.html">2</a></li>
<li><a href="mouseEffect03.html">3</a></li>
<li><a href="mouseEffect04.html">4</a></li>
<li><a href="mouseEffect05.html">5</a></li>
<li><a href="mouseEffect06.html">6</a></li>
</ul>
</header>
<!-- header -->
<main id="main">
<div class="mouse_wrap">
<div class="mouse_cursor"></div>
<div class="mouse_text">
<p><span class="s1">Love</span> looks not with the <span class="s2">eyes</span>, but with the <span class="s3">mind</span>.</p>
<p><span class="s4">사랑</span>은 <span class="s5">눈</span>으로 보지 않고 <span class="s6">마음</span>으로 보는 거지. </p>
</div>
</div>
<div class="mouse_info">
<ul>
<li>clientX : <span class="clientX">0</span></li>
<li>clientY : <span class="clientY">0</span></li>
<li>offsetX : <span class="offsetX">0</span></li>
<li>offsetY : <span class="offsetY">0</span></li>
<li>pageX : <span class="pageX">0</span></li>
<li>pageY : <span class="pageY">0</span></li>
<li>screenX : <span class="screenX">0</span></li>
<li>screenY : <span class="screenY">0</span></li>
</ul>
</div>
</main>
<!-- main -->
<footer id="footer">
<a href="mailto:ture403@gmail.com">ture403@gmail.com</a>
</footer>
</body>
reset.css코드입니다.
@import url('https://webfontworld.github.io/NexonLv1Gothic/NexonLv1Gothic.css');
@import url('https://webfontworld.github.io/hallym/Hallym.css');
@import url('https://webfontworld.github.io/TheJamsil/TheJamsil.css');
@import url('https://webfontworld.github.io/NanumSquareNeo/NanumSquareNeo.css');
@import url('https://webfontworld.github.io/NanumSquare/NanumSquare.css');
@import url('https://webfontworld.github.io/PyeongChang/PyeongChang.css');
@import url('https://webfontworld.github.io/woori/Wooridaum.css');
@import url('https://webfontworld.github.io/gimpo/GimpoGothic.css');
@import url('https://webfontworld.github.io/BMJua/BMJua.css');
@import url('https://fonts.googleapis.com/css2?family=Orbitron&display=swap');
/* reset */
*{
margin: 0;
padding: 0;
color: #fff;
}
*, *::before, *::after {
box-sizing: border-box;
}
a {
text-decoration: none;
color: #222;
}
h1,h2,h3,h4,h5,h6 {
font-weight: normal;
}
ul,ol,li {
list-style: none;
}
img {
vertical-align: top;
width: 100%;
}
em {
font-style: normal;
}
.font01 {
font-family: 'NexonLv1Gothic';
font-weight: 300;
}
.font02 {
font-family: 'Hallym';
}
.font03 {
font-family: 'TheJamsil';
}
.font04 {
font-family: 'NanumSquareNeo';
}
.font05 {
font-family: 'NanumSquare';
}
.font06 {
font-family: 'PyeongChang';
}
.font07 {
font-family: 'Wooridaum';
}
.font08 {
font-family: 'GimpoGothic';
}
.font09 {
font-family: 'BMJua';
}
.font10 {
font-family: 'Orbitron';
font-weight: 400;
}
main.css 입니다.
body {
width: 100%;
height: 100vh;
overflow: hidden;
background-position: center center;
background-size: cover;
}
body.img01 {
background-image: url(../img/mouseEffect01-min.jpg);
}
body.img02 {
background-image: url(../img/mouseEffect02-min.jpg);
}
body.img03 {
background-image: url(../img/mouseEffect03-min.jpg);
}
body.img04 {
background-image: url(../img/mouseEffect04-min.jpg);
}
body.img05 {
background-image: url(../img/mouseEffect05-min.jpg);
}
body.img06 {
background-image: url(../img/mouseEffect06-min.jpg);
}
body.img07 {
background-image: url(../img/mouseEffect07-min.jpg);
}
body.img08 {
background-image: url(../img/mouseEffect08-min.jpg);
}
body.img09 {
background-image: url(../img/mouseEffect09-min.jpg);
}
body.img10 {
background-image: url(../img/mouseEffect10-min.jpg);
}
body::after{
content: "";
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100vh;
background: rgba(5,36,70,0.87);
z-index: -1;
}
body.img01::after{
background: rgba(5,36,70,0.87);
}
body.img02::after{
background: rgba(34,36,70,0.87);
}
body.img03::after{
background: rgba(88,36,70,0.87);
}
body.img03::after{
background: rgba(88,20,81,0.87);
}
body.img04::after{
background: rgba(88,20,20,0.87);
}
body.img05::after{
background: rgba(83, 14, 14, 0.87);
}
body.img05::after{
background: rgba(88, 65, 20, 0.87);
}
body.img06::after{
background: rgba(90, 64, 12, 0.87);
}
body.img07::after{
background: rgba(87, 69, 34, 0.87);
}
body.img08::after{
background: rgba(133, 106, 54, 0.87);
}
body.img09::after{
background: rgba(173, 138, 72, 0.87);
}
body.img10::after{
background: rgba(194, 162, 102, 0.87);
}
/* header */
#header {
padding: 20px;
position: absolute;
left: 0;
top: 0;
}
#header h1 {
margin-bottom: 10px;
}
#header p {
margin-bottom: 10px;
}
#header li {
display: inline-block;
}
#header li a {
border: 1px solid #fff;
width: 30px;
height: 30px;
display: inline-block;
color: #fff;
text-align: center;
line-height: 30px;
}
#header li.active a {
background-color: #fff;
color: #000;
}
/* footer */
#footer {
position: absolute;
right: 0;
bottom: 0;
padding: 20px;
}
#footer a {
color: #fff;
}
html 안에 있는 css입니다.
.mouse_wrap {
cursor: none;
}
.mouse_cursor {
position: absolute;
left: 0;
top: 0;
width: 50px;
height: 50px;
border-radius: 50%;
border: 3px solid #fff;
background-color: rgba(255,255,255,0.1);
user-select: none;
pointer-events: none;
transition:
background-color 0.3s,
border-color 0.3s,
transform 0.6s
;
}
.mouse_cursor.s1 {
background-color: rgba(255,165,0,0.4);
border-color: orange;
}
.mouse_cursor.s2 {
background-color: rgba(53, 209, 39, 0.4);
border-color: rgb(53, 209, 39);
transform: scale(2) rotateY(720deg);
}
.mouse_cursor.s3 {
background-color: rgba(220, 233, 35, 0.4);
border-color: rgb(220, 233, 35);
transform: scale(1.5) rotateX(540deg);
}
.mouse_cursor.s4 {
background-color: rgba(11, 158, 243, 0.4);
border-color: rgb(11, 158, 243);
transform: scale(10);
border-radius: 10px;
}
.mouse_cursor.s5 {
background-color: rgba(11, 158, 243, 0.4);
border-color: rgb(11, 158, 243);
transform: scale(10) skew(90deg);
}
.mouse_cursor.s6 {
background-color: rgba(243, 11, 224, 0.4);
border-color: rgb(243, 11, 224);
transform: scale(0.5);
}
.mouse_text {
width: 100%;
height: 100vh;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
}
.mouse_text p {
font-size: 2vw;
line-height: 1.8;
}
.mouse_text p:last-child {
font-size: 3vw;
}
.mouse_text p span {
color: orange;
border-bottom: 1px dashed rgba(235, 169, 47, 0.7);
}
.mouse_info {
position: absolute;
left: 0;
bottom: 0;
padding: 20px;
font-size: 16px;
line-height: 1.6;
}
자바스크립트 코드 입니다.
window.addEventListener("mousemove", function(event){
document.querySelector(".clientX").innerText = event.clientX;
document.querySelector(".clientY").innerText = event.clientY;
document.querySelector(".offsetX").innerText = event.offsetX;
document.querySelector(".offsetY").innerText = event.offsetY;
document.querySelector(".pageX").innerText = event.pageX;
document.querySelector(".pageY").innerText = event.pageY;
document.querySelector(".screenX").innerText = event.screenX;
document.querySelector(".screenY").innerText = event.screenY;
});
//선택자
const cursor = document.querySelector(".mouse_cursor");
window.addEventListener("mousemove", function(e){
cursor.style.left = e.clientX -25 + "px";
cursor.style.top = e.clientY -25 + "px";
});
// 하나씩 출력
// document.querySelector(".s1").addEventListener("mouseover",function(){
// cursor.classList.add("s1");
// });
// document.querySelector(".s1").addEventListener("mouseout",function(){
// cursor.classList.remove("s1");
// });
// document.querySelector(".s2").addEventListener("mouseover",function(){
// cursor.classList.add("s2");
// });
// document.querySelector(".s2").addEventListener("mouseout",function(){
// cursor.classList.remove("s2");
// });
// document.querySelector(".s3").addEventListener("mouseover",function(){
// cursor.classList.add("s3");
// });
// document.querySelector(".s3").addEventListener("mouseout",function(){
// cursor.classList.remove("s3");
// });
// document.querySelector(".s4").addEventListener("mouseover",function(){
// cursor.classList.add("s4");
// });
// document.querySelector(".s4").addEventListener("mouseout",function(){
// cursor.classList.remove("s4");
// });
// document.querySelector(".s5").addEventListener("mouseover",function(){
// cursor.classList.add("s5");
// });
// document.querySelector(".s5").addEventListener("mouseout",function(){
// cursor.classList.remove("s5");
// });
// document.querySelector(".s6").addEventListener("mouseover",function(){
// cursor.classList.add("s6");
// });
// document.querySelector(".s6").addEventListener("mouseout",function(){
// cursor.classList.remove("s6");
// });
//for문
// for(let i=1; i<=6; i++){
// document.querySelector(".s"+i).addEventListener("mouseover",function(){
// cursor.classList.add("s"+i);
// });
// document.querySelector(".s"+i).addEventListener("mouseout",function(){
// cursor.classList.remove("s"+i);
// });
// }
//forEach문
// document.querySelectorAll(".mouse_text span").forEach(function(el,index){
// el.addEventListener("mouseover",function(){
// cursor.classList.add("s"+(index+1));
// });
// el.addEventListener("mouseout",function(){
// cursor.classList.remove("s"+(index+1));
// });
// });
// getAttribute();
document.querySelectorAll(".mouse_text span").forEach(function(span){
let attr = span.getAttribute("class");
// attr = s1 s2 s3 s4 s5 s6
span.addEventListener("mouseover",function(){
cursor.classList.add(attr);
});
span.addEventListener("mouseout",function(){
cursor.classList.remove(attr);
});
})
// setAttribute();
- 첨에 있는 코드는 mousemove 했을때 각 X,Y값을 넣어 주었습니다.
- 2번쨰 코드는 mousemove 했을때 curor에 값을 넣어주었습니다.
- 그밑에 주석 s1-s6까지 일일이 넣어서 적용한 코드 입니다.
- //for문 밑에 있는 코드는 for문을 이용해서 i값을 넣어서 코드를 적용한 것입니다.
- //forEach문 밑에 있는 코드는 forEach를 이용해서 쓴 코드 입니다. 매개변수 (el,index)를 넣어서 값을 불러왔습니다.
- 그안에 이제 el은 mouse_info li span을 불러와서 index값을 추가 해 주었습니다.
- // getAttribute(); 밑에 있는건 클래스를 불러와서 적용하는 코드 입니다.
- mouse_text span 안에 서 변수 하나 설정 해서 class를 불러왔습니다.
- 그리고 mouseover , mouseout attr 변수 안에 넣어서 적용을 했습니다.
속성 정리 표 입니다.
속성 | 설명 |
clientX , clientY | 브라우저 창의 왼쪽 꼭대기를 기준으로 한 마우스의 X,Y 자표(스크롤 무시) |
screenX , screenY | 컴퓨터 화면의 왼쪽 꼭대기를 기준으로 한 마우스의 X,Y 좌표 |
pageX , pageY | 브라우저에서 보여주고 있는 페이지의 왼쪽 꼭대기를 기준으로 한 마우스 X,Y좌표 |
offsetX , offsetY | 해당 객체를 기준으로 한 마우스의 X,Y좌 |
getAttribute() | 선택한 요소(element)의 특정 속성(attribute)의 값을 가져옵니다. |
완성된 전체화면 입니다.
https://ture403.github.io/web2023/javascript/mouse/mouseEffect01.html
완성된 코드 입니다.
https://github.com/ture403/web2023/blob/main/javascript/mouse/mouseEffect01.html