В пункте 4 непонятно, о чем говорится. Что вы имеете в виду?
Пункт 5:
Во-первых, если вы будете осуществлять пункт 6, то нужно ловить событие onmousedown на триггерах. То есть не
$block.on('mousedown', '.block_range-motion-trigger', function() {
motion();
});
а
$(".block_range-motion-trigger").on('mousedown', function() {
motion();
});
Во-вторых, посмотрите внимательно, вправо расширяется нормально, а влево нет по следующей причине:
$eMotion.css({ 'width': motionWidth});
Когда вы расширяете блок вправо, он
увеличивает width. А когда влево, то уменьшает (логично, вроде). Но вы считаете motionWidth от начала блока, а уменьшаете влево от него и получаете отрицательные значения.
Короче, при расширении влево, значение width становится отрицательным.
А скачет при нажатии на левый триггер потому, что расчет идет с помощью координат. Левый триггер находится левее, отсчет начинается почти от начала координат. Так как триггер находится левее, блок сужается до минимального.
Ваша задача решится, как только вы начнете пересчитывать motionWidth по-другому.