@olya_097

Почему может показываться отрицательное значение, если двигать по максимуму слева?

5e10900106f01481529017.jpeg
вот
например -0.02
а справа максимум 4.95
https://jsfiddle.net/oc17L42n/1/
  • Вопрос задан
  • 138 просмотров
Решения вопроса 1
@sobolay
Как мне кажется, все дело в том, что объект со звездочками у вас довольно мелкий и определение положения курсора при событии выхода мыши за пределы объекта срабатывает некорректно. Для решения можно предложить добавить ограничения наименьшего и наибольшего положения
function move(e, obj) {
	    var summ = 0;
	    var id = obj.next().attr('id').substr(1);
	    var progress = e.pageX - obj.offset().left;

	    var width = obj.width(),
		  leftEdge = obj.offset().left,
		  rightEdge = obj.offset().left + width;

	    if (e.pageX < leftEdge) {
		 progress = 0;
	    } else if (e.pageX >= rightEdge) {
		 progress = obj.width();
	    }
	
	    var rating = progress * 5 / width;

	    $('#param' + id).text(rating.toFixed(2));
	    obj.next().width(progress);
	    $('.stars__count').each(function() {
	      summ += parseFloat($(this).text());
	    });
	  };

и проверку на событие выхода за пределы объекта через правую его границу: если мышь вышла через правую границу, то присваиваем 5
$('.stars__data').on('mouseleave', function(e) {
			var summ = 0;
			var id = $(this).next().attr('id').substr(1);

			var width = $(this).width(),
			      reasonableWidth = width * 0.1,
			      height = $(this).height(),
			      leftEdge = $(this).offset().left,
			      topEdge = $(this).offset().top,
			      bottomEdge = topEdge + height,
			      exitPointX = e.pageX,
			      exitPointY = e.pageY;

			if ( ( exitPointY >= topEdge ) && ( exitPointY <= bottomEdge ) && ( exitPointX > (leftEdge + reasonableWidth) ) ) {
				$('#param' + id).text("5");
				$(this).next().width(width);
				$('.stars__count').each(function() {
					summ += parseFloat($(this).text());
				});
			}
		});
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы