2015-05-04 2 views
0

У меня есть кнопка, которая при нажатии на нее меняет сетку столбцов по умолчанию по умолчанию на единую сетку столбцов. И Y смещение позиции содержащихся элементов в столбце изменяется после этого события click.Реализация события клика с обновленной позицией смещения

Мне нужно знать обновленное положение смещения Y, чтобы иметь возможность scrollTop определенному элементу сразу после изменения сетки столбца, но, похоже, я не уверен, что код работает, и не уверен, что моя структура является правильным способом рефакторинг, чтобы они все синхронизировались.

var lastTrigger; 
var target = $('#' + lastTrigger); 

$('button').click(function() { 
    $('.row > div').toggleClass('col-xs-6').toggleClass('col-xs-12'); 
    lastTrigger = $(this).closest('div').attr('id'); 
    scrollView(updateOffset); 
}); 

function updateOffset() { 
    var currentOffset = target.offset().top; 
    return currentOffset; 
} 

function scrollView() { 
    $('html,body').animate({ 
     scrollTop: currentOffset 
    }, 1000); 
} 

ответ

3

Проблема здесь состоит в том, что ваш target не обновляется, когда вы нажали на кнопку, потому что lastTrigger не определена в момент переменной быть инициализирован. Поэтому, когда вы определяете lastTrigger внутри прослушивателя событий, ничего не происходит.

I created a fiddle, который исправил эту проблему путем инициализации target только после того, как lastTrigger был инициализирован и соответственно обновлен scrollTop.

var lastTrigger; 
var target; 

$('button').click(function() { 
    $('.row > div').toggleClass('col-xs-6').toggleClass('col-xs-12'); 
    lastTrigger = $(this).closest('div').attr('id'); 
    scrollView(); 
}); 

function updateOffset() { 
    target = $('#' + lastTrigger); 
    var currentOffset = target.offset().top; 
    return currentOffset; 
} 

function scrollView() { 
    $('html,body').animate({ 
     scrollTop: updateOffset() 
    }, 1000); 
} 

Я надеюсь, что решает вашу проблему.

+0

Спасибо. Вот сценарий с вашим предложением, но я все еще не получаю результат, который я хочу. http://jsfiddle.net/sungsoonz/oumaqgft/14/ Если вы можете помочь в достижении моей цели, это будет очень признательно. например если вы нажмете кнопку расширения на панели 2, я хочу, чтобы свиток переместился на панель 2 в раскрывающемся окне. –

+0

@SeongLee, он не работал, потому что, по-видимому, анимация jQuery не играет хорошо с переходами CSS. Если вы добавите таймаут, чтобы вы прокручивали его после завершения перехода, он будет работать. Взгляните: http://jsfiddle.net/mayacoda/Lb0ytmkw/1/ –

+0

Это прекрасно! Не знал, что переходы CSS будут иметь проблемы с функцией анимации jQuery. Большое спасибо :) –

3
$('button').click(function() { 
    $('.row > div').toggleClass('col-xs-6').toggleClass('col-xs-12'); 
    var target = $(this).closest('div'); 
    scrollView(updateOffset(target)); 
}); 

function updateOffset(target) { 
    var currentOffset = target.offset().top; 
    return currentOffset; 
} 

function scrollView(currentOffset) { 
    $('html,body').animate({ 
     scrollTop: currentOffset 
    }, 1000); 
} 
+0

Следует отметить, что элемент 'target' - это элемент, возвращаемый методом' ближайший', поэтому вызов '$ ('#' + lastTrigger) является избыточным. – undefined

+0

Спасибо, но я не думаю, что я получаю значение смещения целевого элемента после того, как будет выполнен переключение столбца. Пожалуйста, см. Мою скрипку http://jsfiddle.net/sungsoonz/oumaqgft/13/. если вы нажмете кнопку расширения на панели 2, я хочу, чтобы свиток переместился на панель 2 в раскрывающемся окне. –

Смежные вопросы