с какой стороны блока пришла мышь javascript

137
27 ноября 2018, 21:50

Подскажите пожалуйста как на чистом javascript реализовать появление фона с определенной стороны при навелении мыши https://www.cartoonnetwork.ru/show/adventure-time/games

Answer 1

$(function () { 
    $('div').mouseenter(function (e) { 
        var jEl = $(this), 
            w = jEl.outerWidth(), 
            h = jEl.outerHeight(), 
            off = jEl.offset(), 
            x = e.pageX - off.left, 
            y = e.pageY - off.top, 
            xShift, // сдвиг от правой или левой границы 
            yShift, // сдвиг от верхней или нижней границы 
            xText, 
            yText, 
            itogText; 
 
        if (x / w > .5) { 
            xShift = w - x; 
            xText = 'справа'; 
        } else { 
            xShift = x; 
            xText = 'слева'; 
        } 
 
        if (y / h > .5) { 
            yShift = h - y; 
            yText = 'снизу'; 
        } else { 
            yShift = y; 
            yText = 'сверху'; 
        } 
 
        itogText = (xShift < yShift) ? xText : yText; 
 
        jEl.text(itogText); 
    }); 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<div style="width: 100px; height: 100px; padding: 20px; margin: 20px; background: red;"></div>

Вот пример с JQ как можно реализовать определение откуда мышь заходит в блок. Остаётся немного доработать под ваши нужны

Answer 2

Вот пример на чистом javascript:

var box = document.getElementById('box'); 
 
box.addEventListener("mouseover", function(e) { 
 
  // Определяем центр 
  var centerX = box.offsetLeft + box.offsetWidth / 2; 
  var centerY = box.offsetTop + box.offsetHeight / 2; 
   
  // Определяем позиции 
  var textX = (e.clientX < centerX) ? 'Слева' : 'Справа'; 
  var textY = (e.clientY < centerY) ? 'Сверху' : 'Снизу'; 
	 
  // Определяем сдвиг 
  var shiftX = (e.clientX > centerX) ? e.clientX - centerX : (e.clientX - centerX) * -1; 
  var shiftY = (e.clientY > centerY) ? e.clientY - centerY : (e.clientY - centerY) * -1; 
   
  // Обновляем текст у блока в зависимости от сдвига 
  box.innerText = (shiftX > shiftY) ? textX : textY; 
});
#box { 
  width: 200px; 
  height: 200px; 
  margin: 10px; 
  background: green; 
  color: #fff; 
  font-size: 22px; 
  line-height: 200px; 
  text-align: center; 
}
<div id="box"></div>

READ ALSO
получить позицию строки по сортировке

получить позицию строки по сортировке

В таблице у каждой стройки есть уникальный текст(id), можно отсортировать строки по разным значениям, как получить расположение строки относительно...

171
Есть gif, как добавить на сайт

Есть gif, как добавить на сайт

Gif весит много, хотелось бы преобразовать во что-то, что не будет слишком конфликтно с разными бразуерами, да и в принцепе хотелось бы узнать,...

204
бордер по ширине текста

бордер по ширине текста

Есть блок в котором есть текст, если слова перенеслись на новую строку, блок стал меньше, нужно чтоб снизу был бордер по ширине текста

153