Помогите! Бьюсь уже 3й день с каруселью
Здравствуйте, помогите пожалуйста с каруселью, бьюсь уже 3й день с элементарной задачкой.
Вот мой код: https://jsfiddle.net/fr50zxez/14/ В рабочем варианте он завершен, кроме функции resize. Собственно проблема: Хочу чтобы карусель корректно отображалась при уменьшении/ увеличении ширины страницы. Отталкиваюсь от этого: если страница, допустим, увеличилась на 200px, то и лефт должен увеличится на 200. Вот мой код: resize: function () { for (var i = 0; i<= slider.imgs.length - 1; i++) { slider.imgs.eq(i).css('left', slider.getLeft(i) +(slider.getWidth() - slider.startWidth)) } // Это функция только на увеличение, экрана } Тут я вычисляю текущий лефт и добавляю к нему разницу между первоначальной шириной и текущей шириной, но это не работает. Я уверен, что что то нужно добавить в метод getLeft, но не могу допереть что |
hujak_hujak,
:-? <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <style type="text/css"> #slider{ position: relative; width: 100%; height: 400px; overflow: hidden; } .img{ position: absolute; width: 100%; height: 400px; left: 100%; } .img:nth-of-type(1){ background-color: green; } .img:nth-of-type(2){ background-color: grey; } .img:nth-of-type(3){ background-color: darkcyan; } .img:nth-of-type(4){ background-color: darkkhaki; } .active{ left:0; } #butRight,#butLeft{ z-index: 200; position: absolute; top:200px; width: 40px; height: 40px; background-color: yellow; } #butRight{ right: 5px; } #butLeft{ left: 5px; } </style> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> <script> $(window).load(function() { var item = $(".img"), i = 0, len = item.length; $("#butRight, #butLeft").on("click", function(event) { event.preventDefault(); i += this.id == "butRight" ? 1 : -1; i == -1 && (i = len - 1); i == len && (i = 0); item.removeClass("active").eq(i).addClass("active") }) }); </script> </head> <body> <body> <div id="slider"> <a href="" id="butRight"></a> <a href="" id="butLeft"></a> <div class="img active"></div> <div class="img"></div> <div class="img"></div> <div class="img"></div> </div> </body> </body> </html> |
К сожалению это не работает
|
Цитата:
|
|
hujak_hujak,
не понимаю |
Я наверно криво сформулировал вопрос.
Цель - добиться, что бы при изменении ширины экрана, видна было только 1 картинка. То есть получается, если я увеличу экран на 100px, активный слайдер остается с left: 0 и width:100%, а остальные 3 получают + 100px к left, чтобы не залезать на активный, а на скрине в прошлом ответе, там видно аж 3 картинки одновременно. |
hujak_hujak,
именно так и работает код во втором посте, виден только один блок при любой ширине |
Я же выслал скрин, там сразу 3 блока видно. Как он может работать?
|
Ладно, я еще раз очень внимательно все сделаю, отпишу
|
hujak_hujak,
скопируйте код, для этого есть кнопка справа от кода и проверьте у себя |
ТС, ты какой-то фигней занимаешься. У тебя 100% в стилях, а в скрипте ты получишь .offsetWidth в пикселях. Вот и двигай на это ширину свой left.
|
Да и никакого офсета не нужно, так прям по 100% и двигай влево. Вот проверь на разных размерах фрейма (или окна)
https://jsfiddle.net/fr50zxez/26/ |
Последний элемент в хтмле - это самый верхний в стопке при абсолютном позиционировании. То есть у тебя стек перевернут сейчас. https://jsfiddle.net/fr50zxez/27/
|
Спасибо большое за помощь, сам бы ни за что не додумался до примеров, которые выше. НО, у меня цель другая, мне нужно решить задачу именно с методом resize, который в первых моих сообщениях, или вот https://jsfiddle.net/fr50zxez/28/ .
Я хочу решить эту задачу именно средствами JS, без CSS, как в ваших примерах выше, чтобы лефт зависел от ширины экрана, то есть если если экран увеличился на 100px, то и картинки "за окном браузера" отодвигаются влево на 100, а активная картинка остается на весь экран. Я, конечно, понимаю что это не разумно и требует НА МНОГО больше ресурсов, но сразу скажу: 1. Сама цель этого поста была в просьбе помощи, решения именно resize. А не создания работающей карусели. 2. Мне нужно это решение для приложения, с "нестандартной" картинкой, которое меняет top и left, в зависимости от размера экрана. Картинка будет сначала уменьшаться , при уменьшении экрана, а затем снова уменьшаться, при увеличении. Пока попробую через offset, до него я почему то не допер. Спасибо всем, а warren buffet, особенно. |
Вообще у тебя необычная карусель и вообще не карусель. Карусель - это набитые в ряд или стопкой кадры в один длинннный элемент, который просто проезжает мимо кадрового окна. И тогда при изменении размеров экрана меняется размер этого окна и размер всех кадров соответственно и все продолжает проезжать четкачем.
top и left на размер картинки не влияют. Ладно, продолжай изобретать треугольное колесо. ))) |
Часовой пояс GMT +3, время: 23:05. |