자 바스 크 립 트 회전 라운드 맵 구현

7112 단어 js윤파 도
최근 에 자 바스 크 립 트 를 계속 공부 하고 회전 윤 방도 사례 를 보고 js 로 간단 한 윤 방도 를 만들어 보 았 습 니 다.동적 효 과 를 나 타 낼 수 없 기 때문에 캡 처 를 넣 었 습 니 다.

이 효 과 는 이 렇 습 니 다.모두 7 장의 그림 이 있 습 니 다.그들 은 자동 으로 왼쪽으로 미 끄 러 집 니 다.그리고 좌우 화살 표 는 라운드 그림 의 왼쪽 미끄럼 과 오른쪽 미끄럼 을 제어 할 수 있 습 니 다.또한 마우스 가 그림 에 멈 추 면 라운드 그림 은 자동 으로 미 끄 러 지 는 것 을 멈 추고 마우스 가 이동 할 때 계속 왼쪽으로 돌아 갑 니 다.
우선,저 는 두 개의 함 수 를 봉 인 했 습 니 다.(jQuery 를 아직 배우 지 않 았 기 때문에 봉 인 된 함수 의 방법 으로 이 루어 졌 습 니 다)첫 번 째 함 수 는$함수 입 니 다.호출 하면 html 의 요 소 를 얻 을 수 있 습 니 다.코드 는 다음 과 같 습 니 다.

`function $(select){
 if (typeof select != 'string') {
  console.log('       ');  
  return null;
 }
 var firstChar = select.charAt(0);
 switch(firstChar){
  case '#':
  return document.getElementById(select.substr(1));
  break;
  case '.':
  if (document.getElementsByClassName){
   return document.getElementsByClassName(select.substr(1));
  } else {
   var result = [];
   var allElemnts = document.getElementsByTagName('*');
   console.log(allElemnts);
   for (var i = 0; i < allElemnts.length; i++){
   var e = allElemnts[i];
   var className = e.className;
   var classArr = className.split(' ');
   for (var j = 0; j < classArr.length; j++){
    var c = classArr[j];
    if (c == select.substr(1)) {
    result.push(e);
    break;
    }
   }
   }
   return result;
  }
  break;
  default :
  return document.getElementsByTagName(select);
 }
 }`

두 번 째 함 수 는 애니메이션 함수 로 json 으로 여러 스타일 의 동적 변 화 를 실현 하여 하나의 애니메이션 효 과 를 얻 을 수 있 습 니 다.코드 는 다음 과 같 습 니 다.

function animate(element, json, fun) {
 clearInterval(element.timer);
 function getStyle(element, styleName){
 if(element.currentStyle){
  //ie         currentstyle   
  //return element.currentStyle.heigh;
  return element.currentStyle[styleName];
 }else{
  var computedStyle = window.getComputedStyle(element,null);
  return computedStyle[styleName];
 }
 }
 var isStop = false;
 element.timer = setInterval(function () {
 isStop = true;
 for (var key in json){
  var target = json[key];
  var current;
  if (key == 'opacity') {
  //                       
  current = parseFloat(getStyle(element, key)) || 1;
  } else {
  //          
  current = parseInt(getStyle(element, key)) || 0;
  }  
  var step = (target - current) / 10;
  if (key != 'opacity') {
  step = step > 0 ? Math.ceil(step) : Math.floor(step);
  }
  current += step;
  if (key == 'opacity') {
  if (Math.abs(target - current) > 0.01) {
   isStop = false;
  } else {
   current = target;
  }
  element.style.opacity = current + '';
  } else {
  if (Math.abs(target-current) > Math.abs(step)) {
   isStop = false;
  } else {
   current = target;
  }
  if (key == 'zIndex'){
   element.style.zIndex = Math.round(current);
  } else {
   element.style[key] = current + 'px';
  }  
  }  
 }
 if (isStop) {
  clearInterval(element.timer);
  console.log('    ');
  if (typeof fun == 'function') {
  fun();
  }
 }
 }, 30);
}`

다음은 html 부분 을 써 야 합 니 다.그림 이 몇 장 밖 에 없 기 때문에 html 부분 은 간단 합 니 다.

<body>
 <div class="box">
 <div class="content">
  <ul>
  <li><a href="#"><img src="./images/1.jpg"></a></li>
  <li><a href="#"><img src="./images/2.jpg"></a></li>
  <li><a href="#"><img src="./images/3.jpg"></a></li>
  <li><a href="#"><img src="./images/4.jpg" class="current"></a></li>
  <li><a href="#"><img src="./images/5.jpg"></a></li>
  <li><a href="#"><img src="./images/6.jpg"></a></li>
  <li><a href="#"><img src="./images/7.jpg"></a></li>
  </ul>
 </div>
 <div class="control">
  <a href="javascript:;" id="prev"></a>
  <a href="javascript:;" id="next"></a>
 </div>
 </div>
</body>
css 스타일 의 부분 도 서술 을 많이 하지 않 습 니 다.
다음은 JS 부분 입 니 다.코드 도 간단 합 니 다.정리 하면 됩 니 다.

 window.onload = function(){
 //  ,           
 var json = [{
 width: 630,
 top: 23,
 left: 0,
 zIndex: 2,
 opacity: 0
 },{
 width: 630,
 top: 23,
 left: 0,
 zIndex: 3,
 opacity: 0
 },{
 width: 630,
 top: 23,
 left: 0,
 zIndex: 4,
 opacity: 0.6
 },{
 width: 730,
 top: 0,
 left: 125,
 zIndex: 5,
 opacity: 1
 },{
 width: 630,
 top: 23,
 left: 350,
 zIndex: 4,
 opacity: 0.6
 },{
 width: 630,
 top: 23,
 left: 350,
 zIndex: 3,
 opacity: 0
 },{
 width: 630,
 top: 23,
 left: 350,
 zIndex: 2,
 opacity: 0
 }];

function refreshImageLocatin(index){
 //       i     i   
 //index=1   i    i-1   
 //    i    i-index   
 var liArr = $('li');
 for(var i = 0; i < liArr.length; i++){
  var li = liArr[i];
  var locationIndex = i - index;
  console.log('i='+i);
  console.log('index='+index);
  console.log('locationIndex='+locationIndex);
  if(locationIndex < 0){
  locationIndex += 7;
  }
  var locationData = json[locationIndex];
  animate(li, locationData, null);
 }
 }

 refreshImageLocatin(0);

 var index = 0;
 $('#next').onclick = function(){
 index++;
 if(index == 7){
  index = 0;
 }
 refreshImageLocatin(index);
 }
 $('#prev').onclick = function(){
 index--;
 if(index < 0){
  index = 6;
 }
 refreshImageLocatin(index);
 }

 var nextImage = $('#next').onclick;
 var contentBox = $('.content')[0];
 //    
 var timer = setInterval(nextImage, 3000);
 //         ,    
 contentBox.onmouseover = function(){
 clearInterval(timer);
 }
 contentBox.onmouseout = function(){
 timer = setInterval(nextImage ,3000)
 }
}
이상 은 회전 라운드 맵 의 모든 내용 입 니 다.자신의 학습 과정 에 간단 한 기록 을 하 는 동시에 공 고 히 하 겠 습 니 다.

좋은 웹페이지 즐겨찾기