열심히 끝까지
디바이스 융합 자바(Java) day33 - jQuery 라이브러리,jQuery CDN,아코디언메뉴,광고(및 갤러리),마우스이벤트,키보드엔터이벤트 본문
디바이스 융합 자바(Java) day33 - jQuery 라이브러리,jQuery CDN,아코디언메뉴,광고(및 갤러리),마우스이벤트,키보드엔터이벤트
노유림 2022. 7. 27. 17:46[오늘 수업]
jQuery 라이브러리
자바 스크립트에서 자주 사용되는 라이브러리 널리 사용됨
존재하는 이유 : 자바 스크립트가 사용되는 것이 제멋대로, 복잡하기 때문에 쉽게 사용하고 싶다고 반영된 것
기본 제공되는 라이브러리가 아니다!
몇가지 import 해야한다.. 뭔가를 새로 넣겠다 하면 어려워함..
<우리가 직접 확보>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>jQuery 라이브러리</title>
</head>
<body>
<!-- 자바 스크립트에서 자주 사용되는 라이브러리 널리 사용됨 -->
<!-- 존재하는 이유 : 자바 스크립트가 사용되는 것이 제멋대로, 복잡하기 때문에 쉽게 사용하고 싶다고 반영된 것 -->
<!-- 기본 제공되는 라이브러리가 아니다! -->
<!-- 몇가지 import 해야한다.. 뭔가를 새로 넣겠다 하면 어려워함.. -->
<script src="js/jquery-3.6.0.min.js"></script>
<script type="text/javascript">
// jQuery라이브러리를 이용한 코드를 작성
// $ : 객체표시
// $앞에 있는 객체가 로드되면 ready()안에 들어간 기능을 수행해줘!
$(document).ready(function(){
console.log('jquery 라이브러리 연결 완료!');
});
</script>
</body>
</html>
- jQuery라이브러리를 이용한 코드를 작성
<script src="js/jquery-3.6.0.min.js"></script> 확보
$().ready();
- $ : 객체표시
- $앞에 있는 객체가 로드되면 ready()안에 들어간 기능을 수행해줘!
jQuery CDN
<라이브러리를 직접 확보할 수 없거나, 쓸 수 없을 때>
<!-- 네트워크 많이 잡아먹지 않는 방향으로 진행 -->
jQuery 측에서 직접 제공하는 것 사용
<CDN을 실습에서는 사용할 수 있음>
<jQuery CDN>
<script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
>> 인터넷이 연결되어 있지 않으면 사용 불가!!!
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>jQuery CDN</title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
<style type="text/css">
header, div,nav,ul,li,footer {
margin:5px;
}
</style>
</head>
<body>
<!-- 네트워크 많이 잡아먹지 않는 방향으로 진행 -->
<script type="text/javascript">
$(document).ready(function(){
$('.logo').css('border', '5px solid lightgreen');
$('#gnb').css('border', '1px solid red');
$('footer, .left, .right').css('border','2px solid gray');
// 여러개 한꺼번에 작업 가능!
});
</script>
<header id="header">
<div class="logo">로고</div>
<div class='search'>검색하기</div>
<nav id='gnb'>
<ul>
<li>메뉴1
<ul>
<li>메뉴1-1</li>
<li>메뉴1-2</li>
</ul>
</li>
<li>메뉴2</li>
</ul>
</nav>
</header>
<div id='content'>
<div class="left">왼쪽</div>
<div class="right">오른쪽</div>
</div>
<footer id='footer'>
회사 소개<br>
개인정보처리방침
</footer>
</body>
</html>
* 전체 선택자를 쓰는건
웹 자원을 많이 쓰는 요인
>> 느려지게 만든다(서비스)
>> *이 아닌 header, div,nav,ul,li,footer 라고 하나하나씩 작성해 사용
>> 사용하는 기술을 모두 하나하나씩 언급하는 것이 좋음
<jquery가 위에서 script로 있는데도 출력이 잘 되네요?>
- 화면에 모든 파일이 적재되고 진행
- 다이렉트로 읽어서 문제가 진행됬기 때문에 script를 아래로 놔뒀어야 했지만
파일이 준비되면 진행되기 때문에 상단배치 해도 괜찮다!
<강사님 문제>
: 이번 문제는 잘 모르는게 많아 강사님 것을 참조함
: 과제칸이 아닌 수업칸에 작성
메뉴1
메뉴1-1
메뉴1-1-1
메뉴1-1-2
메뉴1-2
메뉴1-2-1
메뉴1-2-2
메뉴1-3
메뉴1-3-1
메뉴1-3-2
메뉴2
메뉴2-1
메뉴2-2
메뉴3
입장하면
메뉴1
메뉴2
메뉴3
누르면 안에 있는 것이 보이고 보이고.. 진행
Hint)
toggleClass()를 사용해볼 것
class 속성을 +,-
class="on"
class="off"
>> 시도해 본 내용
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>강사님 문제</title>
<style>
* {
margin: 0;
padding: 0;
}
li {
list-style: none;
}
a {
color: black;
text-decoration: none;
}
#menu {
position: absolute;
width: 50%;
height: 100%;
background: lightgray;
}
#menu a {
display: block;
padding: 20px;
border: 1px solid black;
}
#menu a.m, ul a {
background: lightpink;
}
#menu a.m.on {
color: red;
}
#menu li ul {
display: none;
}
#menu li ul.on {
display: block;
}
</style>
<script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
</head>
<body>
<script>
$(document).ready(function() {
$("#menu a.m").click(function() {
$(this).next('ul').slideToggle(200);
});
});
</script>
<ul id="menu">
<li><a href="#" class="m">메뉴1</a>
<ul>
<li><a href="#" class="m">메뉴1-1</a>
<ul>
<li><a href="#">메뉴1-1-1</a></li>
<li><a href="#">메뉴1-1-2</a></li>
</ul></li>
<li><a href="#" class="m">메뉴1-2</a>
<ul>
<li><a href="#">메뉴1-2-1</a></li>
<li><a href="#">메뉴1-2-2</a></li>
</ul></li>
<li><a href="#" class="m">메뉴1-3</a>
<ul>
<li><a href="#">메뉴1-3-1</a></li>
<li><a href="#">메뉴1-3-2</a></li>
</ul></li>
</ul></li>
<li><a href="#" class="m">메뉴2</a>
<ul>
<li><a href="#">메뉴2-1</a></li>
<li><a href="#">메뉴2-2</a></li>
<li><a href="#">메뉴2-3</a></li>
</ul></li>
<li><a href="#" class="m">메뉴3</a>
<ul>
<li><a href="#">메뉴3-1</a></li>
<li><a href="#">메뉴3-2</a></li>
<li><a href="#">메뉴3-3</a></li>
</ul></li>
</ul>
</body>
</html>
>> 강사님 방식
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>아코디언 메뉴</title>
<style>
* {
margin: 0;
padding: 0;
}
li {
list-style: none;
}
a {
color: black;
text-decoration: none;
}
#menu {
position: absolute;
width: 50%;
height: 100%;
background: lightgray;
}
#menu a {
display: block;
padding: 20px;
border: 1px solid black;
}
#menu a.m, ul a {
background: lightpink;
}
#menu a.m.on {
color: red;
}
#menu li ul {
display: none;
}
#menu li ul.on {
display: block;
}
</style>
<script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
</head>
<body>
<script>
$(document).ready(function() {
$("#menu a.m").click(function() {
$(this).next().addBack().toggleClass("on").end().find(".m, ul").removeClass("on").end().parent().siblings().find(".m, ul").removeClass("on");
return false;
});
});
/*
$(this).next().addBack().toggleClass("on")
자신요소와 자신의 서브메뉴들에게 on class속성 추가
this next()
.find(".m, ul").removeClass("on")
자신의 하위 서브 메뉴들 초기화(on class속성 제거)
.parent().siblings().find(".m, ul").removeClass("on");
다른 메뉴들도 초기화
*/
</script>
<ul id="menu">
<li><a href="#" class="m">메뉴1</a>
<ul>
<li><a href="#" class="m">메뉴1-1</a>
<ul>
<li><a href="#">메뉴1-1-1</a></li>
<li><a href="#">메뉴1-1-2</a></li>
</ul></li>
<li><a href="#" class="m">메뉴1-2</a>
<ul>
<li><a href="#">메뉴1-2-1</a></li>
<li><a href="#">메뉴1-2-2</a></li>
</ul></li>
<li><a href="#" class="m">메뉴1-3</a>
<ul>
<li><a href="#">메뉴1-3-1</a></li>
<li><a href="#">메뉴1-3-2</a></li>
</ul></li>
</ul></li>
<li><a href="#" class="m">메뉴2</a>
<ul>
<li><a href="#">메뉴2-1</a></li>
<li><a href="#">메뉴2-2</a></li>
<li><a href="#">메뉴2-3</a></li>
</ul></li>
<li><a href="#" class="m">메뉴3</a>
<ul>
<li><a href="#">메뉴3-1</a></li>
<li><a href="#">메뉴3-2</a></li>
<li><a href="#">메뉴3-3</a></li>
</ul></li>
</ul>
</body>
</html>
--광고, 갤러리
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>광고, 갤러리</title>
<style type="text/css">
*{
margin:0px;
padding:0px;
}
#content{
width:200px;
margin:20px;
}
#content .page{
text-align:right;
margin:5px;
}
#content .page button{
background: lightblue;
color:white;
width:20px;
height:20px;
overflow:hidden;
border:none;
line-height:1.5;
}
#content .pic{
width:150px;
height:150px;
border:3px solid blue;
overflow:hidden;
}
</style>
<script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
</head>
<body>
<script type="text/javascript">
$(document).ready(function(){
var total=$('.pic > div').length; // 정수값을 넣지 않아도 알아서 카운팅 : 4
var curr=1;
$(".pageInfo > span:first").text(curr); // 첫번째 second가 있거나 하지 않음
$(".pageInfo > span:last").text(total); // 마지막
$(".nextBtn").click(function(){
curr++;
if(curr>total){
curr=1;
}
$(".pageInfo > span:first").text(curr);
$(".pic div:first").insertAfter(".pic div:last");
});
$(".prevBtn").click(function(){
curr--;
if(curr<1){
curr=total;
}
$(".pageInfo > span:first").text(curr);
$(".pic div:last").insertBefore(".pic div:first");
});
});
</script>
<div id='content'>
<div class="page">
<span class='pageInfo'>
<span></span> / <span></span>
</span>
<button class='prevBtn'>< 이전</button>
<button class='nextBtn'>> 다음</button>
</div>
<div class="pic">
<div><img alt="1번째 사진" src="images/1.png"></div>
<div><img alt="2번째 사진" src="images/2.png"></div>
<div><img alt="3번째 사진" src="images/3.png"></div>
<div><img alt="4번째 사진" src="images/4.png"></div>
</div>
</div>
</body>
</html>
-- 마우스이벤트
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>마우스 이벤트</title>
<style type="text/css">
div{
margin:20px;
padding:40px;
background-color:lightgray;
}
</style>
<script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
</head>
<body>
<script type="text/javascript">
$(document).ready(function(){
$('.box1').mouseover(function(){
$('.result').append('<strong>마우스오버</strong>');
});
$('.box2').mouseenter(function(){
$('.result').append('<em>마우스엔터</em>');
});
});
</script>
<div class='box1'>마우스오버</div>
<div class='box2'>마우스엔터</div>
<div class='result'></div>
</body>
</html>
-- 키보드엔터 (내가 해본 것)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>키보드 엔터</title>
<style type="text/css">
input{
width:200px;
height:20px;
}
</style>
<script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
</head>
<body>
<script type="text/javascript">
$(document).ready(function(){
$("#search").keyup(function(e){ // 입력 창의 값에 keyup값 발생
if(e.keyCode==13){ // 그 코드가 13(enter)이면
alert($("#search").val()); // 창 띄우기
$('#out').val($(this).val()); // + 출력값에도 그대로 출력
}
});
});
</script>
<strong>검색창</strong>
<br>
입력 : <input type="text" id="search">
<br>
출력 : <input type="text" id="out">
</body>
</html>