Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 12.03.2015, 21:43
Новичок на форуме
Отправить личное сообщение для Kobe_kobe Посмотреть профиль Найти все сообщения от Kobe_kobe
 
Регистрация: 12.03.2015
Сообщений: 5

Повторное использования скрипта.
Здравствуйте. Возникла проблема. Имеется два одинаковых слайдера(карусели). При нажатие на кнопку для прокрутки первой карусели, начинают прокручиваться оба. Понятно, что можно создать еще один скрипт для второй карусели и поменять названия классам.
Возможно ли использовать только один скрипт? Чтобы он определял, что я кликаю на кнопку, к примеру первой карусели и она только прокручивалась.



var carWidth=240;
    var visibleSlide = 3;
    var blockMargin = 10;

    $(function(){
    $('.blocks').width($('.blocks').children().size()*carWidth);


        $('#next_car').click(function(){
            nextCar();
        });
        $('#prev_car').click(function(){
            prevCar();
        });
    });


    function nextCar(){
        var currentSlide=parseInt($('.blocks').data('current'));
        currentSlide++;
        if(currentSlide>=visibleSlide)
        {
            $('.blocks').css('left',-(currentSlide-2)*carWidth+blockMargin);
            $('.blocks').append($('.blocks').children().first().clone());
            $('.blocks').children().first().remove();
            currentSlide--;
        }
        $('.blocks').animate({left: -currentSlide*carWidth},300).data('current',currentSlide);
    }

    function prevCar(){
        var currentSlide=parseInt($('.blocks').data('current'));
        currentSlide--;
        if(currentSlide<0)
        {
            $('.blocks').css('left',-(currentSlide+2)*carWidth-blockMargin);
            $('.blocks').prepend($('.blocks').children().last().clone());
            $('.blocks').children().last().remove();
            currentSlide++;
        }
        $('.blocks').animate({left: -currentSlide*carWidth},300).data('current',currentSlide);
    }
Ответить с цитированием
  #2 (permalink)  
Старый 12.03.2015, 22:05
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от Kobe_kobe
#next_car
Для начала id заменить на классы.
Далее вместо $('.bloks') используй $el = $('#slider1') в начале скрипта и далее $el.find('.blocks')....

Далее оберни код в функцию или констуктор и передавай #slider1 аргументом. Вызывай дважды:

makeSlider('#slider1');
makeSlider('#slider2');

Такой вот примитивный вариант.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #3 (permalink)  
Старый 12.03.2015, 22:43
Новичок на форуме
Отправить личное сообщение для Kobe_kobe Посмотреть профиль Найти все сообщения от Kobe_kobe
 
Регистрация: 12.03.2015
Сообщений: 5

похоже я что-то не понял, у меня сейчас вообще перестал реагировать.


var carWidth=240;
    var visibleSlide = 3;
    var blockMargin = 10;
    function makeSlider (a) {
        $el = a;
        $(function(){
        $el.find('.blocks').width($('.blocks').children().size()*carWidth);


            $('.next_car').click(function(){
                nextCar();
            });
            $('.prev_car').click(function(){
                prevCar();
            });
        });


        function nextCar(){
            var currentSlide=parseInt($el.find('.blocks').data('current'));
            currentSlide++;
            if(currentSlide>=visibleSlide)
            {
                $el.find('.blocks').css('left',-(currentSlide-2)*carWidth+blockMargin);
                $el.find('.blocks').append(el.find$('.blocks').children().first().clone());
                $el.find('.blocks').children().first().remove();
                currentSlide--;
            }
            $el.find('.blocks').animate({left: -currentSlide*carWidth},300).data('current',currentSlide);
        }

        function prevCar(){
            var currentSlide=parseInt($el.find('.blocks').data('current'));
            currentSlide--;
            if(currentSlide<0)
            {
                $el.find('.blocks').css('left',-(currentSlide+2)*carWidth-blockMargin);
                $el.find('.blocks').prepend($el.find('.blocks').children().last().clone());
                $el.find('.blocks').children().last().remove();
                currentSlide++;
            }
            $el.find('.blocks').animate({left: -currentSlide*carWidth},300).data('current',currentSlide);
        }
    }
    makeSlider('#carousel1');
    makeSlider('#carousel2');
Ответить с цитированием
  #4 (permalink)  
Старый 13.03.2015, 06:06
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от Kobe_kobe
$el = a;
a - у тебя строка, например '#carousel'. Откуда у строки метод find()? Я разве так писал? Где перед объявлением переменной ключевое слово var?
Сообщение от Kobe_kobe
el.find$('.blocks')
Это че такое? Косяков тьма.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #5 (permalink)  
Старый 14.03.2015, 19:26
Новичок на форуме
Отправить личное сообщение для Kobe_kobe Посмотреть профиль Найти все сообщения от Kobe_kobe
 
Регистрация: 12.03.2015
Сообщений: 5

Спасибо. Функция заработала, но работает некорректно. При нажатие на кнопку первой карусели два раза перелистывает вторую(2 элемента перелистывает) . При нажатие на кнопку второй карусели, при первом клике также перелистывает вторую карусель дважды(2 элемента). Не могли бы вы подсказать, что не так с кодом?

var carWidth=240;
   var visibleSlide = 3;
   var blockMargin = 10;

 function makeSlider (a) {
        var el;
        $el = $(a);
        $(function(){
        $el.find('.blocks').width($el.find('.blocks').children().size()*carWidth);


            $('.next_car').click(function(){
                nextCar();
            });
            $('.prev_car').click(function(){
                prevCar();
            });
        });


        function nextCar(){
            var currentSlide=parseInt($el.find('.blocks').data('current'));
            currentSlide++;
            if(currentSlide>=visibleSlide)
            {
                $el.find('.blocks').css('left',-(currentSlide-2)*carWidth+blockMargin);
                $el.find('.blocks').append($el.find('.blocks').children().first().clone());
                $el.find('.blocks').children().first().remove();
                currentSlide--;
            }
            $el.find('.blocks').animate({left: -currentSlide*carWidth},300).data('current',currentSlide);
        }

        function prevCar(){
            var currentSlide=parseInt($el.find('.blocks').data('current'));
            currentSlide--;
            if(currentSlide<0)
            {
                $el.find('.blocks').css('left',-(currentSlide+2)*carWidth-blockMargin);
                $el.find('.blocks').prepend($el.find('.blocks').children().last().clone());
                $el.find('.blocks').children().last().remove();
                currentSlide++;
            }
            $el.find('.blocks').animate({left: -currentSlide*carWidth},300).data('current',currentSlide);
        }
    }
     makeSlider('#carousel1');
    makeSlider('#carousel2');
Ответить с цитированием
  #6 (permalink)  
Старый 14.03.2015, 20:29
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Все используемые скриптом элементы нужно искать не по всей странице, а только в обертке карусели. Вместо $('.blocks') должно быть $el.find('.blocks') или $('.blocks', $el) - это синонимы.


Кстати, зачем ты постоянно "ищешь" этот гребаный .blocks? Слабо найти один раз и записать результат в переменную?
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #7 (permalink)  
Старый 14.03.2015, 21:19
Новичок на форуме
Отправить личное сообщение для Kobe_kobe Посмотреть профиль Найти все сообщения от Kobe_kobe
 
Регистрация: 12.03.2015
Сообщений: 5

Исправил. Теперь, при клике на кнопку первой карусели, не реагирует. При клике на кнопку второй карусели листает два элемента второй карусели.

var carWidth=240;
    var visibleSlide = 3;
    var blockMargin = 10;

    function makeSlider (a) {
        var el;
        $el = $(a);
        var elBlock = $el.find('.blocks');
        $(function(){
        elBlock.width(elBlock.children().size()*carWidth);


            $el.find('.next_car').click(function(){
                nextCar();
            });
            $el.find('.prev_car').click(function(){
                prevCar();
            });
        });


        function nextCar(){
            var currentSlide=parseInt($el.find('.blocks').data('current'));
            currentSlide++;
            if(currentSlide>=visibleSlide)
            {
                elBlock.css('left',-(currentSlide-2)*carWidth);
                elBlock.append(elBlock.children().first().clone());
                elBlock.children().first().remove();
                currentSlide--;
            }
            $el.find('.blocks').animate({left: -currentSlide*carWidth},300).data('current',currentSlide);
        }

        function prevCar(){
            var currentSlide=parseInt($el.find('.blocks').data('current'));
            currentSlide--;
            if(currentSlide<0)
            {
                elBlock.css('left',-(currentSlide+2)*carWidth);
                elBlock.prepend($el.find('.blocks').children().last().clone());
                elBlock.children().last().remove();
                currentSlide++;
            }
            $el.find('.blocks').animate({left: -currentSlide*carWidth},300).data('current',currentSlide);
        }
    }
     makeSlider('#carousel1');
     makeSlider('#carousel2');
Ответить с цитированием
  #8 (permalink)  
Старый 15.03.2015, 05:23
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от Kobe_kobe
$el = $(a);
А где объявление $el? Без ключевого слова "var" ты неявно создал глобальную переменную (ОДНУ на два слайдера).

Ошибки дибильнейшие, надоело проверять их, так что гуд бай.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #9 (permalink)  
Старый 15.03.2015, 11:30
Новичок на форуме
Отправить личное сообщение для Kobe_kobe Посмотреть профиль Найти все сообщения от Kobe_kobe
 
Регистрация: 12.03.2015
Сообщений: 5

я объявлял переменную var el; И глобально, и пробывал локально. Ошибка не меняется.
function makeSlider (a) {
        var el;


или
var el;
function makeSlider (a) {
.....
Ответить с цитированием
  #10 (permalink)  
Старый 15.03.2015, 18:55
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

$el или el?
__________________
В личку только с интересными предложениями
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
запретить использования скрипта gerserk Общие вопросы Javascript 1 06.01.2015 12:57
Проблема использования кавычек lar_i_sa AJAX и COMET 13 20.02.2013 14:33
Повторное действие скрипта через определенное время fortitudo jQuery 8 27.01.2010 06:00
Круговорт скрипта.... Karl Общие вопросы Javascript 1 17.10.2009 15:37
Блок переключения меню на JS, два скрипта в одном файле Dizeloid Элементы интерфейса 0 30.07.2009 12:03