Нелинейное перемещение элемента относительно другого элемента

#javascript #algorithm

#javascript #алгоритм

Вопрос:

Я перемещаю элемент относительно другого элемента. Давайте назовем их элементом A и элементом B.

Для простоты вопроса я сохранил только ось X.

 var element_a_container_width = 200;
var element_b_container_width = 700;

// I get position of the mouse,
// it is this position of Element A
// is is: 0 to 200
var mouse_x = e.clientX;

// I calculate relative position (0 to 1),
// (so 0 - is start and 1 is end)
var percentage_x = element_a_container_width / mouse_x;

// I apply position to Element B,
// based on its coordinates (container width)
var element_b_position = percentage_x * element_b_container_width;
  

Все хорошо. НО. Мне нужно применить положение к элементу B нелинейным способом, например:

  • Если положение мыши равно 0-50 — Элемент B всегда должен быть равен 0.
  • Если положение мыши равно 150-200 — Элемент B всегда должен находиться в своем максимальном положении ( element_b_container_width ).
  • Если положение мыши равно 50-150 — Элемент B должен переместиться соответствующим образом (от 0 до element_b_container_width )

Возможно, я упускаю что-то очевидное, но я не могу понять, как это сделать, каждый раз, когда что-то не так.

Спасибо за любую помощь!

Ответ №1:

Как насчет этого

 var percentage_x = (mouse_x - 50)/100;
var element_b_position = 0
if (mouse_x > 150) {
  element_b_position = element_b_container_width
}
if (mouse_x >= 50 amp;amp; mouse_x <= 150 ) {
  element_b_position = percentage_x * element_b_container_width
}
  

Комментарии:

1. Спасибо. Но таким образом это не меняется плавно, percentage_x должно быть 0, когда мы находимся на 50 и 1, когда мы находимся на 150. В вашем примере — percentage_x будет составлять около 0,2 при 50 и около 0,8 при 150.

2. Неважно, я разобрался, ваш ответ привел меня в правильном направлении. Это percentage_x = (mouse_x - 50) / (element_a_container_width - 100 ) . Еще раз спасибо.

Ответ №2:

Вы можете использовать «if(){}», чтобы внести изменения. процессор не может читать ваши мысли.

 function fMouse (x) {
  if (x > 0 amp;amp; x < 50) {
    return minvalue;
  } else if (x > 50 amp;amp; x < 150) {
    return x;
  } else if (x > 150 amp;amp; x < 200) {
    return maxvalue;
  }
}
  

Простой алгоритм — вы можете изменить минимальное-максимальное значение.

Комментарии:

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

2. @DebanjanB Я согласен со своей грубостью. Но это было только потому, что это была очень простая вещь.

3. Но вы эксперт в этой области, в то время как OP, возможно, новичок, который впервые пачкает руки.

4. @DebanjanB Хорошо, я понял