Когда я поворачиваю изображение с помощью mousemove, я не могу получить отрицательный X градус

#javascript #jquery

#язык JavaScript #jquery

Вопрос:

Я пытаюсь переместить картинку в 3d. Когда я пройду половину картинки, смещение мыши должно быть положительным, но в остальном должно быть увеличено отрицательным образом. Как я могу сделать это для получения степени поворота?

Мой эксперимент похож на этот:

 $('#img').mousemove(function (event) {  $(this).removeClass('transition-effect');  let mouseX = event.offsetX;  let itemWidth = $(this).width();  let degree = (10 * mouseX) / itemWidth;// For maximize to 10 degree  let negativeDegree = -((10 * mouseX) / itemWidth);// For get a negative degree  if (mouseX gt;= itemWidth/2) {  // console.log(`itemWidth:${itemWidth/2} - mouseX:${mouseX}`);  $(this).css('transform', 'perspective(1000px) rotateY('   degree   'deg)');  $(this).css('box-shadow', ''   degree   'px 0px 20px #fbe989');  }else{  $(this).css('transform', 'perspective(1000px) rotateY('   negativeDegree  'deg)');  $(this).css('box-shadow', ''   negativeDegree   'px 0px 20px #fbe989');  }  }).mouseleave(function () {  $(this).addClass('transition-effect');  $(this).css('box-shadow', '1px 0px 20px #c1c1c1');  $(this).css('transform', 'perspective(0) rotateY(0deg)'); }) 
 .transition-effect{  transition: all 0.5s ease-in-out;  } 
 lt;script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"gt;lt;/scriptgt; lt;img src="https://www.cumhuriyet.com.tr/Archive/2021/8/3/1857648/kapak_173121.jpg"  class="img-fluid img-thumbnail take-it" id="img"gt; 

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

1. Можете ли вы опубликовать остальную часть кода, изображение и т. Д.?

2. я публикую это @ComputersEnthusiast

3. Конечно, извините за плохой английский, я надеюсь, вы это понимаете @ComputersEnthusiast

4. Это похоже на решение моей проблемы, спасибо за вашу помощь. Но, похоже, я не могу отметить это раньше, чем через 15 очков. Я приду сюда после того, как получу твою отметку 🙂

Ответ №1:

Проблема заключалась в том, что слева у вас было mouseX = 0, поэтому в этот момент вы должны вычислить mouseX — расстояние (так, ширина изображения mouseX / 2, например, -200), затем преобразовать его в положительное значение для угла и добавить — к степени.

 $('#img').mousemove(function (event) {  $(this).removeClass('transition-effect');  let mouseX = event.offsetX;  let itemWidth = $(this).width();  let half = itemWidth / 2;  let degree = mouseX gt;= half ? ((10 * mouseX) / itemWidth) : (((-(mouseX - itemWidth)) * 10)/itemWidth);   let negativeDegree = -((10 * mouseX) / itemWidth);// For get a negative degree  if (mouseX gt;= half) {  // console.log(`itemWidth:${itemWidth/2} - mouseX:${mouseX}`);  $(this).css('transform', 'perspective(1000px) rotateY('   degree   'deg)');  $(this).css('box-shadow', ''   degree   'px 0px 20px #fbe989');  }else{  $(this).css('transform', 'perspective(1000px) rotateY(-'   degree  'deg)');  $(this).css('box-shadow', '-'   degree   'px 0px 20px #fbe989');  }  }).mouseleave(function () {  $(this).addClass('transition-effect');  $(this).css('box-shadow', '1px 0px 20px #c1c1c1');  $(this).css('transform', 'perspective(0) rotateY(0deg)'); }) 
 .transition-effect{  transition: all 0.5s ease-in-out;  } 
 lt;script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"gt;lt;/scriptgt; lt;img src="https://www.cumhuriyet.com.tr/Archive/2021/8/3/1857648/kapak_173121.jpg"  class="img-fluid img-thumbnail take-it" id="img"gt; 

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

1. Теперь мне нужно начать градус с 0 для двух половин. Я постараюсь сделать это для плавного перехода.

2. Да, это незначительная деталь, дай мне знать, если это не сработает. Но в принципе вы можете удалить проверку, если mouseX gt; половина, и просто поставить градусы.

Ответ №2:

Мой последний подобный код для плавного перехода:

 $('#img').mousemove(function (event) {  $(this).removeClass('transition-effect');   let itemWidth = $(this).width();  let mousesX = event.offsetX;  let half = itemWidth / 2;  let mouseX = mousesX gt;= half ? Math.abs((itemWidth - mousesX) - half) : -((itemWidth - mousesX) - half); //console.log(mouseX);  let degree = ((10 * mouseX) / itemWidth) ;  let negativeDegree = -((10 * mouseX) / itemWidth);// For get a negative degree  //console.log((itemWidth - mouseX) - half);  if (mouseX gt;= half) {  // console.log(`itemWidth:${itemWidth/2} - mouseX:${mouseX}`);  $(this).css('transform', 'perspective(1000px) rotateY('   degree   'deg)');  $(this).css('box-shadow', '-'   degree   'px 0px 10px gray');  } else {  $(this).css('transform', 'perspective(1000px) rotateY('   degree   'deg)');  $(this).css('box-shadow', ''   degree   'px 0px 10px gray');  }  }).mouseleave(function () {  $(this).addClass('transition-effect');  $(this).css('box-shadow', '1px 0px 20px #c1c1c1');  $(this).css('transform', 'perspective(0) rotateY(0deg)'); }) 
 .transition-effect{  transition: all 0.5s ease-in-out;  } 
 lt;script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"gt;lt;/scriptgt;  lt;img src="https://www.cumhuriyet.com.tr/Archive/2021/8/3/1857648/kapak_173121.jpg"  class="img-fluid img-thumbnail take-it" id="img"gt;