Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.07.2012, 20:30
Интересующийся
Отправить личное сообщение для W1nD Посмотреть профиль Найти все сообщения от W1nD
 
Регистрация: 19.04.2011
Сообщений: 15

jquery плагин для множества элементов
Добрый день! У меня вознилка проблема, я пишу небольшой плагин, который бы перемещал элементы на странице при скроле
$(document).ready(function () {  
    $(window).on('scroll', function () {
    	$('.avatar').animatePosition({
            	'direction': 'right'        	
    	});        
    });
});

Все отлично работает для одного элемента, если же элементов больше, плагин работает только для первого элемента
(function ($) {
    var el_factor = null,
        el_animation_start_coordinate = null,
        win_scrool_coordinate = null,
        el_top_position = null,
        coff_scroll = null,
        cache_scroll_position = null,
        el_left_coordinate = null,
        el_animation_end = null,
        result_coordinate = null;

    var get_el_position = function get_el_position(context) {
            var $this = $(context);

            el_animation_end = $this.data('coordinate-end-animation')
            el_animation_start_coordinate = $this.data('coordinate-start-animation');

            el_top_position = $this.offset().top;
            winscrool_coordinate = viewport_size.window_scroll_y(); //scroll coordinate

            coff_scroll = (el_top_position - el_animation_start_coordinate) / el_animation_end;
            coff_scroll = Math.round(coff_scroll)
            return coff_scroll, winscrool_coordinate, el_top_position, el_animation_start_coordinate;
        }
/* code plugin */
    $.fn.animatePosition = function (options) {
        	return $(this).each(function(){
        		get_el_position(this);
	            var $this = $(this),
	                direction = options.direction;
	            if (direction == 'right') {
	                result_coordinate = $this.parent().width() - $this.position().left - $this.width();
	            } else if (direction == 'left') {
	                result_coordinate = $this.position()[direction];
	            }
	            /*check sroll top or bottom*/
	            diff_last_scroll_position = winscrool_coordinate - cache_scroll_position;
	            el_coordinate = result_coordinate + coff_scroll;
	            if (winscrool_coordinate >= el_animation_start_coordinate && diff_last_scroll_position > 0 && el_coordinate < el_animation_end) {
	                console.log('result_coordinate', result_coordinate)
	                $this.css(direction, el_coordinate)
	            }
	            if (el_left_coordinate >= el_animation_end) {
	                $this.addClass('endMoveElement')
	            }
	            cache_scroll_position = viewport_size.window_scroll_y()
        	})
            
    }
}(jQuery))

В чем может быть проблема?
Ответить с цитированием
  #2 (permalink)  
Старый 11.07.2012, 14:02
Аватар для zlodeeev
Кандидат Javascript-наук
Отправить личное сообщение для zlodeeev Посмотреть профиль Найти все сообщения от zlodeeev
 
Регистрация: 11.07.2012
Сообщений: 113

Потому что метод у тебя расчитан на один элемент, а не на массив, который будет в $this, а соответственно не сработают $this.position()
Ответить с цитированием
  #3 (permalink)  
Старый 11.07.2012, 15:49
Интересующийся
Отправить личное сообщение для W1nD Посмотреть профиль Найти все сообщения от W1nD
 
Регистрация: 19.04.2011
Сообщений: 15

Не свсем понимаю где я допустил ошибку, вроде в коде самого плагина я делаю перебор всех элементов
return $(this).each(function(){})

может быть я что-то не так понял(
Ответить с цитированием
  #4 (permalink)  
Старый 11.07.2012, 15:53
Аватар для zlodeeev
Кандидат Javascript-наук
Отправить личное сообщение для zlodeeev Посмотреть профиль Найти все сообщения от zlodeeev
 
Регистрация: 11.07.2012
Сообщений: 113

Тоуп, each я не заметил, глубочайше извиняюсь..

А viewport_size откуда берется?

Последний раз редактировалось zlodeeev, 11.07.2012 в 16:03.
Ответить с цитированием
  #5 (permalink)  
Старый 11.07.2012, 16:51
Интересующийся
Отправить личное сообщение для W1nD Посмотреть профиль Найти все сообщения от W1nD
 
Регистрация: 19.04.2011
Сообщений: 15

береться из кода, который я не указал
Ответить с цитированием
Ответ


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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
jQuery для загрузки страницы в <div> Dr.Holerik jQuery 12 11.10.2016 17:36
Нужно написать плагин для Thunderbird Thunderbird_2012 Работа 0 12.03.2012 22:33
jQuery поменять CSS цвет для текста при наведении мышью (.text:hover) JooZ jQuery 16 15.11.2010 18:56
Jquery, Dynatree и JSON antirek jQuery 6 01.09.2009 14:00