Простой способ создания jQuery Slider

Я хотел создать простой статический jQuery-слайдер. Прямо сейчас у меня есть дизайн. Он имеет маленькие точки в виде разбиения на страницы в правом нижнем углу, с заголовком, изображением и некоторым контентом. Он должен иметь возможность бесконечно вращаться, а также иметь возможность играть и останавливаться. Не требуется много функций.

    Сегодня я попробовал слайдер контента с фиксированной разбивкой на страницы. Я реализовал это для чего-то, что я бы сказал после его выпуска. Я мог бы просто использовать плагин, но из-за некоторых технических проблем, и я тоже хотел что-то узнать, поэтому я сделал это на своем onw.

    Я начал с HTML-разметки, начиная с двух UL . Один держит пагинацию, а другой – содержимое слайдов .

    Начиная с этой разметки HTML , я перешел к CSS и разместил элементы макета.

    HTML

     
    • Heading https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/1

      Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/15https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/0https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/0s!.

    • Heading https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/2

      Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/15https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/0https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/0s!.

    • Heading https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/3

      Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/15https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/0https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/0s!.

    • Heading https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/4

      Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/15https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/0https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/0s!.

    • Heading 5

      Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/15https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/0https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/0s!.

    Мне было трудно решить проблемы, вызванные нашим старым Internet Explorer 7 и немного современными браузерами Internet Explorer 8 , поэтому мне пришлось вмешиваться в их проприетарную форму взлома и исправлять их! Окончательный CSS появился следующим образом:

    CSS

     .slider {padding: https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/0; height: https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/15https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/0px; position: relative; overflow: hidden; width: https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/27https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/0px;} .slider .content-slides {position: absolute; top: https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/0; left: https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/0; padding: https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/0; margin: https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/0;} .slider .content-slides li {width: https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/27https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/0px; height: https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/15https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/0px; position: relative; float: left; list-style: none;} .slider .content-slides li img {width: https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/27https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/0px; height: https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/15https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/0px; display: block;} .slider .content-slides li .desc {position: absolute; font-size: 9https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/0%; background: #999; background: rgba(https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/0, https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/0, https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/0, https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/0.5); left: https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/0; top: https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/0; width: https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/1https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/0https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/0%; overflow: hidden; padding: https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/0 https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/0 5px;} .slider .content-slides li .desc * {color: #fff; width: https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/2https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/0https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/0px; margin: 5px https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/1https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/0px; line-height: https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/1.https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/1em;} .slider .content-pagination {text-align: right; position: absolute; bottom: https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/1https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/0px; right: https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/1https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/0px; z-index: 5;} .slider .content-pagination li {float: none; display: inline; font-size: https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/0.75em; padding: https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/0.https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/25em;} .slider .content-pagination li a {width: 7px; height: 7px; border-radius: 7px; background-color: #ccc; overflow: hidden; line-height: https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/1https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/0px; font-size: https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/1px; text-indent: -999em; display: inline-block; *display: inline; *zoom: https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/1;} .slider .content-pagination li.active-marker a, .slider .content-pagination li a:hover {background-color: #https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/08c; color: #fff;} 

    И да, ширина и высота фоновых изображений фиксированы, и они были https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/27https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/0px × https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/15https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/0px .

    Теперь наступает действительно интересная часть, которая заняла у меня около часа! JavaScript набирает время, как угодно! 🙂 Я должен признать, что в своем JavaScript я использовал некачественный подход, поскольку я касался только этого 5-го контента всегда с разбивкой по страницам и не масштабируемым в будущем, как слайдер.

    JavaScript

    Прежде всего, я понятия не имел, как работают эти слайдеры, но у меня была небольшая идея, что UL будет иметь ширину суммы всех LI , которые она имеет. Итак, это стало первым утверждением:

     $(".slider .content-slides").width($(".slider .content-slides").children().size() * $(".slider .content-slides").width()); 

    Мне нужен счетчик, чтобы запросить текущую страницу. Поэтому я инициализировал index счетчика и присвоил ему значение https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/0 . Многие из вас пропустили эту часть !!! Добавьте это тоже!

     index = https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/0; 

    Следующий шаг – создать функцию , которая оживляет весь слайдер. Да, я использовал jQuery, чтобы помочь мне! Таким образом, функция выполняется следующим образом:

     function slideStart() { curPage = ((index) % $(".slider .content-slides").children().size()) + https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/1; $(".slider .content-slides").animate({ "left": -($(".slider .content-slides li:nth-child(" + curPage + ")").position().left) }); $(".slider .content-pagination li").removeClass("active-marker"); $(".slider .content-pagination li:nth-child(" + curPage + ")").addClass("active-marker"); index++; } 

    Поскольку я объявлял index как глобальную переменную, я могу получить к нему доступ в любое время из любого места. Его объем действителен через скрипты и внутренние функции. Я инициализировал переменную для текущей страницы как значение модуля count index деленное на количество детей внутри слайдера.

    В следующей строке появляется функция animate() , которую предоставляет jQuery. Он используется для изменения свойств CSS как заданного в плавном переходе вместо резкого или внезапного изменения. Эта функция теперь перемещает (скользит) левую позицию контейнера списка UL для соответствия следующему элементу LI .

    Затем появляется материал для разбивки на страницы. Он добавляет текущий слайд, используя еще один удивительный CSS / jQuery Selector :nth-child() , который буквально выбирает n-й дочерний элемент контейнера. После загрузки слайда соответствующий LI будет отмечен как активный, добавив class active .

    Наконец, значение index увеличивается на https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/1, используя традиционный способ !

    Переход к следующей функции, которая добавляет событие click к кнопкам разбиения на страницы. Я думал, что это будет сложный путь, но мне удалось сделать это простым способом, просто установив значение index , очистив старый таймер и перезапустив функцию слайдера.

     $(".slider .content-pagination li a").click(function(){ index = $(this).attr("href"); clearInterval(islider); slideStart(); islider = setInterval("slideStart()", https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/25https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/0https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/0); return false; }); 

    Я добавил return false; в конце, чтобы ссылка не соответствовала URL-адресу, иначе он откроет URL-адрес из своего атрибута href . Теперь идет заключительная часть и важная. Инициализатор для скрипта. Нам просто нужно запустить слайдер, используя функцию slideStart() и пусть он будет работать с фиксированным интервалом, скажем, https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/2,5 секунды . Поскольку он должен быть выполнен после загрузки документа, он предоставляется внутри функции $(document).ready() .

     $(document).ready(function(){ slideStart(); islider = setInterval("slideStart()", https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/25https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/0https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/0); }); 

    Окончательный JavaScript

     $(".slider .content-slides").width($(".slider .content-slides").children().size() * $(".slider .content-slides").width()); function slideStart() { curPage = ((index) % $(".slider .content-slides").children().size()) + https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/1; $(".slider .content-slides").animate({ "left": -($(".slider .content-slides li:nth-child(" + curPage + ")").position().left) }); $(".slider .content-pagination li").removeClass("active-marker"); $(".slider .content-pagination li:nth-child(" + curPage + ")").addClass("active-marker"); index++; } $(".slider .content-pagination li a").click(function(){ index = $(this).attr("href"); clearInterval(islider); slideStart(); islider = setInterval("slideStart()", https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/25https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/0https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/0); return false; }); $(document).ready(function(){ index = https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/0; islider = setInterval("slideStart()", https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/25https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/0https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/0); }); 

    Полная демонстрация: http://jsbin.com/uhowak/https://stackoverflow.com/questions/12233575/simple-way-of-creating-jquery-slider/2

    Надеюсь, это поможет кому-то! 🙂