Цикл данных массива в карусели не работает - PullRequest
0 голосов
/ 13 июня 2019

Я пытаюсь построить карусель в JS, которая использует массив для хранения моих данных.Я хочу, чтобы в поле слева отображалось значение «Клиент», а в поле справа - значение «Кандидат».

Я не могу заставить его работать, несмотря на то, что я считаю, что все правильно?

let testimonials = [{
    client: "Raphel",
    candidate: "male"
  },
  {
    client: "Tom",
    candidate: "male"
  },
  {
    client: "Jerry",
    candidate: "male"
  },
  {
    client: "Dorry",
    candidate: "female"
  }
];

var i = 0;

function nextItem() {
  i = i + 1;
  i = i % testimonials.length;
  return testimonials[i].candidate;
}

function prevItem() {
  if (i === 0) {
    i = testimonials.length;
  }
  i = i - 1;
  return testimonials[i].client;
}

window.addEventListener('load', function() {
  $('.client-box').html(testimonials[i].client);
  $('.candidate-box').html(testimonials[i].candidate);

  $('.left-btn').on('click', function(e) {
    $('.client-box').html(prevItem());
    $('.candidate-box').html(prevItem());
  });

  $('.right-btn').on('click', function(e) {
    $('.client-box').html(nextItem());
    $('.candidate-box').html(nextItem());
  });


});

https://jsfiddle.net/cL5mok3f/

Ответы [ 2 ]

0 голосов
/ 13 июня 2019

Для достижения ожидаемого результата используйте нижеприведенную опцию

Проблема: Дважды вызывается метод PrevItem и nextItem при нажатии левой и правой кнопки, что создает несовместимую карусель

Пример кода

let testimonials = [
  {client: "Raphel", candidate: "male"},
  {client: "Tom", candidate: "male"},
  {client: "Jerry", candidate: "male"},
  {client: "Dorry", candidate: "female"}
];



var i = 0;

$('.client-box').text(testimonials[0].client);
$('.candidate-box').text(testimonials[1].candidate); 

function nextItem() {
    i = i + 1;
  if (i === testimonials.length) {
        i = i % testimonials.length;
    } 
    return testimonials[i];
}

function prevItem() {
    if (i === 0) {
        i = testimonials.length;
    }
    i = i - 1;
  console.log("prev", i)
    return testimonials[i]; 
}

	 $('.left-btn').on('click', function(e){
     let val = prevItem()
		   $('.client-box').text(val.client);
    		$('.candidate-box').text(val.candidate); 
	 });
	
	 $('.right-btn').on('click', function(e){
     let val = nextItem()
		  $('.client-box').text(val.client);
    		$('.candidate-box').text(val.candidate); 
	 });
    
.testimonial-carousel {
  position: relative;
  width: 1000px;
}
.testimonial-carousel::after {
  content: "";
  display: block;
  clear: both;
}
.testimonial-carousel .testimonial-box {
  width: 500px;
  height: 100px;
  float: left;
  background: #999999;
}
.testimonial-carousel .testimonial-box.candidate-box {
  background: white;
  margin-top: 2rem;
  box-shadow: 0 0 1rem rgba(0, 0, 0, 0.2);
}
.testimonial-carousel .buttons {
  position: absolute;
  bottom: -60px;
  right: 20px;
}
.testimonial-carousel .buttons::after {
  content: "";
  display: block;
  clear: both;
}
.testimonial-carousel .buttons .btn {
  background: black;
  width: 60px;
  height: 60px;
  float: left;
  margin-right: 5px;
  display: block;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="testimonial-carousel">
	<div class="testimonial-box client-box"></div>
	<div class="testimonial-box candidate-box"></div>
	<div class="buttons">
		<a href="#" class="btn left-btn">LEFT</a>
		<a href="#" class="btn right-btn">RIGHT</a>
	</div>
</div>

codepen - https://codepen.io/nagasai/pen/wLKoVv

0 голосов
/ 13 июня 2019

Исправление кода:

let testimonials = [{
    client: "Raphel",
    candidate: "male"
  },
  {
    client: "Tom",
    candidate: "male"
  },
  {
    client: "Jerry",
    candidate: "male"
  },
  {
    client: "Dorry",
    candidate: "female"
  }
];

var i = 0;

function nextItem() {
  i = i + 1;
  i = i % testimonials.length;
  return testimonials[i];
}

function prevItem() {
  if (i === 0) {
    i = testimonials.length;
  }
  i = i - 1;
  return testimonials[i];
}

window.addEventListener('load', function() {
  $('.client-box').html(testimonials[i].client);
  $('.candidate-box').html(testimonials[i].candidate);

  $('.left-btn').on('click', function(e) {
    var prev = prevItem();
    $('.client-box').html(prev.client);
    $('.candidate-box').html(prev.candidate);
  });

  $('.right-btn').on('click', function(e) {
    var next = nextItem();
    $('.client-box').html(next.client);
    $('.candidate-box').html(next.candidate);
  });


});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="client-box"></div>
<div class="candidate-box"></div>
<input type="button" class="left-btn" value="Prev" />

<input type="button" class="right-btn" value="Next" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...