Чтобы ответить на ваш первый вопрос, причина, по которой вы получаете больше слайдов, чем хотите, - это то, что вам нужно быть более конкретным в вашей JS.
Ваши обработчики событий следующей и предыдущей кнопки используют анимацию jQuery для перемещения div 'slidie' - это прекрасно. Однако вам нужно добавить дополнительную логику, чтобы остановить анимацию div еще дальше и дальше, если в этом конкретном направлении больше нет слайдов. Я изменил свои JS, чтобы осуществить то, что я верю, что вы хотели:
var sliderWidth = 300;
var slider = $('#slidie');
var sliderCount = $('div', slider).length;
slider.width(sliderCount * sliderWidth);
var currentSlide = 1;
$('a.prev').click(function() {
if (currentSlide > 1) {
$('#slidie').animate({
left: '+=' + sliderWidth
}, 500);
currentSlide -= 1;
}
});
$('a.next').click(function() {
if (currentSlide < sliderCount) {
$('#slidie').animate({
left: '-=' + sliderWidth
}, 500);
currentSlide += 1;
}
});
Все, что я добавил это дополнительная переменная называется currentSlide
, которая инициализируется 1. Это необходимо для того, чтобы вы отслеживать, какие слайд в настоящее время отображается пользователю.
Затем в обоих обработчиках событий вы проверяете, есть ли currentSlide
, чтобы анимация разрешалась. Вам нужно только, чтобы кнопка prev работала, если текущий слайд > 1
, то есть вы не на первом слайде. Аналогично, вы хотите, чтобы следующая кнопка работала, если текущий слайд < sliderCount
, то есть вы не находитесь на последнем слайде.
После выполнения анимации вы также должны обязательно изменить currentSlide
, чтобы синхронизировать его с тем, что пользователь просматривает. Это делается с помощью строк кода currentSlide -= 1
и currentSlide += 1
.
Чтобы ответить на ваш второй вопрос, я полагаю, что проблема заключается в том, что jQuery не закончил загрузку до того, как ваш код будет выполнен. Я бы в первую очередь изменять порядок тегов сценариев в HTML, так что загружается JQuery первым:
<script src="http://ajax.googleapis.com/ajax/jQuery/jquery-1.10.2.min.js"></script>
<script src="Webdesign/NagelsalonHintham/js/functions.js"></script>
Кроме того, по соображениям безопасности, я бы обернуть свой код в готовом случае JQuery DOM. Это в основном означает, что код, который вы пишете, выполняется только после того, как ваш DOM (инфраструктура, позволяющая JS получить доступ к HTML-странице) будет сконструирован вашим браузером. Поэтому, если вы ссылаетесь на любые теги (которые вы делаете), вы знаете, что теги существуют до запуска JS. Это показано ниже:
$(document).ready(function() {
// Your code from above goes here
});
Причина, по которой работает в JSFiddle, потому что они делают JQuery в том числе для вас, в том числе ввод кода в нужном месте (по умолчанию). Вы можете изменить это в левой части окна JSFiddle.
Для справки, работая JSFiddle для этого решения здесь: http://jsfiddle.net/EULJd/
Спасибо за ваш ответ. Я добавил код javascript между готовым тегом документа, который вы показали, однако он пока не работает при просмотре домашней страницы в html. Я понятия не имею, что я делаю неправильно. – user3231901
Я нашел его! Решение действительно заключалось в том, чтобы поместить код между готовыми тегами документа, и я забыл поставить http: // перед ссылкой jquery. – user3231901
Приятно слышать, что это работает, и да - не включая 'http: //', предоставит браузеру неправильный URL-адрес для сценария jQuery. Вы также можете обратиться к внешнему скрипту, используя «//ajax.googleapis.com/ajax/jQuery/jquery-1.10.2.min.js», т. Е. Не указывая «http:». Это сокращение, которое говорит браузеру «использовать текущий протокол для доступа к этому URL», поэтому, если ваш сайт использует простой HTTP, он использует «http: //», но если ваш сайт использует HTTPS, он использует «https: //», что полезно в последнем случае - это более безопасно. Браузеры действительно жалуются, если вы используете ресурсы, отличные от HTTPS, при использовании HTTPS для обслуживания вашей страницы. –