jQuery 애니메이션 내 비게 이 션 표시 줄 효과 구현

애니메이션 효 과 를 펼 치 는 네 비게 이 션 바 를 디자인 하고 사용자 정의 하 며 demo 를 써 보 았 습 니 다.게다가 디자인 과 디 버 깅 차이 가 하루 도 많 지 않 았 습 니 다.
디자인->레이아웃 쓰기->스타일 쓰기->JS 코드 를 써 서 완전히 자신 이 디자인 한 네 비게 이 션 바 를 완성 하 는 방법 에 대해 이야기 합 니 다.
HTML 쓰기 레이아웃,CSS 쓰기 스타일,JS 쓰기 애니메이션 효과 와 이벤트 응답 등 을 고려 하여 JQuery 가 DOM 작업 에 대한 편의 성 을 고려 하여 JQuery 를 사용 하면 적은 노력 으로 큰 효 과 를 거 둘 수 있 습 니 다.
디자인:
자신 이 다운로드 한 네 비게 이 션 바 플러그 인 이 너무 천편일률 적 이 라 고 생각한다 면 자신 이 좋아 하 는 네 비게 이 션 바 를 설계 하 세 요.종이 한 장 으로 자신 이 원 하 는 내 비게 이 션 을 그 려 서 어떤 효 과 를 얻 고 싶 은 지 그 려 볼 수 있다.
예 를 들 어 여기 서 네 비게 이 션 바 를 쓰 려 면 마 우 스 는 각 장 위 에 떠 있 고 아래 의 모든 노드 를 가로로 뻗 을 수 있 으 며 노드 의 등장 은 점프 동작 이 있다.
레이아웃 쓰기:
생각 을 정리 한 후에 HTML 을 쓰기 시 작 했 는데 이 단 계 는 상대 적 으로 간단 하 다.일반적으로
라 는 몇 개의 라벨 을 사용 하면 됩 니 다.차원 관 계 를 분명하게 쓰 는 것 이 중요 하 다.몇 가 지 를 설명해 야 합 니까?
는 블록 급 요소 입 니 다.이것 은 그 내용 이 자동 으로 새 줄 을 시작 한 다 는 것 을 의미한다.라벨 은 한 줄 을 차지 하지 않 습 니 다.보통 내용 을 감 싸 는 데 사 용 됩 니 다.블록 급 요소 가 아니 기 때문에 width,height 속성 을 설정 할 수 없습니다.라벨 은 당연히 링크 를 넣 는 데 쓰 입 니 다.쓰기 스타일:스타일 은 천천히 디 버 깅 해 야 하 며 인내심 을 써 야 한다.배색 은 고전적 인 배색 방안 을 참고 할 수 있다.아래 의 모든 노드 를 가로로 스 트 레 칭 하려 면 다 중 표시 줄 레이아웃 과 같은 효과 가 필요 합 니 다.과태그 설정 스타일 display:inline-block 은 대상 을 내 연 대상 으로 전달 할 수 있 지만 대상 의 내용 은 블록 대상 으로 전달 할 수 있 습 니 다.쉽게 말 하면 width,height 를 설정 할 뿐만 아니 라 한 줄 을 강제로 차지 하지 않 는 다 는 것 이다.display:flex 라 는 강력 한 CSS 3 레이아웃 속성 으로 여러 칸 의 다 열 레이아웃 을 실현 할 수 있 습 니 다.JS 쓰기:레이아웃 을 다 쓴 후에 기능 을 실현 해 야 합 니 다.앞에서 언급 한 네 비게 이 션 바 는 마우스 가 각 장 위 에 떠 있 고 아래 의 모든 노드 를 가로로 뻗 을 수 있다.자 연 스 럽 게 hover 사건 으로 jQuery 의 hover 사건 을 살 펴 보 겠 습 니 다.$(selector).hover(inFunction,outFunction)괄호 안에 있 는 첫 번 째 function 은 mouseover 이벤트 가 발생 할 때 실행 하 는 함 수 를 규정 해 야 합 니 다.두 번 째 function 은 mouseout 이벤트 가 발생 할 때 실행 되 는 함 수 를 선택 할 수 있 습 니 다.jQuery 역시 애니메이션 효 과 를 편리 하 게 실현 할 수 있 습 니 다.animate()방법 은 CSS 스타일 을 통 해 요 소 를 한 상태 에서 다른 상태 로 바 꿀 수 있 습 니 다.CSS 속성 값 은 점차적으로 바 뀌 었 습 니 다.그러면 애니메이션 효 과 를 만 들 수 있 습 니 다.여기 서 더 이상 군말 하지 않 습 니 다.노드 가 순서대로 나타 나 고 싶 지만 animate 로 줄 을 서고 싶 지 않 기 때문에 저 는 리 셋 함 수 를 썼 습 니 다.리 셋 함수 에 setTimeout 지연 시간 을 썼 고 addClass 로 응답 하 는 노드 에 animation 애니메이션 스타일 을 붙 였 습 니 다.코드: <!--Created by CC on 2017/10/14--> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>~myNav~</title> <script type="text/javascript" src="jquery.js"></script> <!--스타일--> <style type="text/css"> .triangle-right { width: 0; height: 0; border-left: 20px solid #FF7800; border-bottom: 20px solid transparent; border-top:2px dotted #333333; display: inline-block; margin-top:10px; vertical-align: top; } .mynav { font-family: punctuation,"PingFangSC-Regular","Microsoft Yahei","sans-serif"; -webkit-font-smoothing: subpixel-antialiased; margin:10px 2%; width:90%; heigth:450px; display:flex; } .nav-left{ flex:auto; heigth:200px; font-size:20px; font-weight: 700; text-align: center; background-color:#505050 ; color:#FF7800; border-right:3px solid #FF7800; width:80px; padding-top:40px; } .nav-right{ flex:auto; width:90% } .nav-right div{ position:relative; } .cap{ display:inline-block; width:70px; height:30px; background-color: #FF7800; margin:10px 0; border-bottom:2px dotted #333333; border-top:2px dotted #333333; } .child{ display:inline-block; width:0px; border-top:2px dotted #333333; vertical-align: top; margin-top: 10px; } span.cap-child { position:absolute; border:2px solid #333333; background-color: #505050; color: #ffffff; -webkit-border-radius: 8px; -moz-border-radius: 8px; border-radius: 8px; /*top:5px;*/ left:0px; } span.cap-child a{ font-size:15px; color:white; } span.cap-child a:hover{ color: #ffc8aa; } .hr-over{ position:absolute; -webkit-border-radius: 10px; -moz-border-radius: 10px; border-radius: 10px; background-color: #FF7800; width:20px; height:20px; margin-top:-10px; border:1px solid #333333; } .showit{ animation: cho-show .5s; } @keyframes cho-show { 0% { -webkit-transform-origin: right bottom; transform-origin: right bottom; -webkit-transform: rotate3d(0, 0, 1, 45deg); transform: rotate3d(0, 0, 1, 45deg); opacity:0; } 100% { -webkit-transform-origin: right bottom; transform-origin: right bottom; -webkit-transform: none; transform: none; opacity:1; } } </style> </head> <body> <!--레이아웃--> <div class="mynav"> <div class="nav-left"> 목<br/>록<br> <span style="font-size:6px"> by cc </span> </div> <div class="nav-right" > <div > <span class="cap ">Chapter1</span><div class="triangle-right"></div> <div class="child"> </div> </div> <div > <span class="cap">Chapter2</span><div class="triangle-right"></div> <div class="child"> </div> </div> <div > <span class="cap">Chapter3</span><div class="triangle-right"></div> <div class="child"> </div> </div> </div> </div> <script type="text/javascript"> var active=''; var space=80; var myNodes =[{ name:'Chapter1', children:[{name:'문자 집합',url:'https://baike.baidu.com/item/%E5%AD%97%E7%AC%A6%E9%9B%86/946585?fr=aladdin'}, {name:'주석',url:'cc/sd1/index'}, {name:'직접 양',url:'cc/sd2/index'} ]}, {name:'Chapter2', children:[{name:'숫자',url:'\#'}, {name:'텍스트',url:'\#'}, {name:'불 값',url:'\#'}, {name:'전역 대상',url:'\#'}, {name:'포장 대상',url:'\#'} ]}, { name:'Chapter3', children 어린이:[{name:'고양이',url:'\#'}, {name:'강아지',url:'\#'} ]} ]; $('.cap').hover(function(){ var cap=this; var mybox=$(cap.parentNode).find('.child'); if(active!=this.innerHTML) { //변색 $(cap).css('background-color','#ffc8aa'); $(cap).next().css('border-left-color','#ffc8aa'); //원래 내용 정리 for(var j=0;j<$('.child').length;j++) { //console.log($('.child')[j]); $($('.child')[j]).empty(); $($('.child')[j]).css('width','0px'); } active=this.innerHTML; myNodes.forEach(function(item){ if(active==item.name) { myAnimate(item.children,mybox); } } ); } //순서 표시 orderShow($(mybox),$(mybox).children().length-1); }, function(){ //변색 $(this).css('background-color','#FF7800'); $(this).next().css('border-left-color','#FF7800'); }); function myAnimate(arr,ele) { // console.log(ele); var $ele=$(ele); var pos; arr.forEach(function(item,index){ pos=space*index+20; addOne(item,pos+'px'); }); $ele.animate({width:pos+100+'px'},200,'linear',function(){ var left=pos+80+'px'; $ele.append("<span class='hr-over' style='left:"+left+"'></span>"); }); function addOne(item,pos) { var mylink="<a href='"+item.url+"'>"+item.name+"</a>"; $ele.append("<span class='cap-child' style='display:none;left:"+pos+"'>"+mylink+"</span>") } } function orderShow($it,times) { if(times>=0) { setTimeout(function(){ $($it.children()[times]).css('display','block') $($it.children()[times]).addClass('showit'); orderShow($it,times-1) },100); } else return; } </script> </body> </html>효과: 동적 효과: 이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기