Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 05.04.2017, 15:33
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Янковиц,
попытка номер три - если left = width - 250;
если заведомо известно что left меньше width то зачем это проверять if ( width > left )
Ответить с цитированием
  #12 (permalink)  
Старый 05.04.2017, 15:46
Профессор
Отправить личное сообщение для Янковиц Посмотреть профиль Найти все сообщения от Янковиц
 
Регистрация: 17.11.2014
Сообщений: 403

Еще разочек. Сейчас соображу...
window.addEventListener('mouseover', function(e) {
	var cursorposX = e.pageX;
	var cursorposY = e.pageY;
	var margintop = cursorposY - 250;
	var marginleft = cursorposX - 250;
	if ( cursorposY < 250 ){
		document.getElementsByTagName('span')[0].style.top="30px";
	} else if ( cursorposY > margintop ) {
		document.getElementsByTagName('span')[0].style.bottom="30px";
	}
	if ( cursorposX < 250 ){
		document.getElementsByTagName('span')[0].style.left="125px";
	} else if ( cursorposX > marginleft ) {
		document.getElementsByTagName('span')[0].style.right="125px";
	}
}, false);

1. Определяем позицию курсора по оси игрек
Допустим у нас высота 1000 пикселей.
Если курсор находится по высоте менее 250 пикселей, тогда подсказке задаем стиль - top:30px Так выводим подсказку снизу.
Если курсор находится по высоте больше чем 1000 минус 250 пикселей (то есть более 750 пикселей), тогда выводим подсказку сверху тем, что задаем ей стиль bottom: 30px;
Если курсор по высоте где то посередине, то ничего не делаем, подсказка отлично вписывается в экран

Ааа, сообразил, мне нужно получить высоту экрана

Последний раз редактировалось Янковиц, 05.04.2017 в 15:55.
Ответить с цитированием
  #13 (permalink)  
Старый 05.04.2017, 15:54
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Янковиц,
ничего же не поменялось

тоже самое что
window.addEventListener('mouseover', function(e) {
	var cursorposX = e.pageX;
	var cursorposY = e.pageY;
		if ( cursorposY < 250 ){
		document.getElementsByTagName('span')[0].style.top="30px";
	} else {
		document.getElementsByTagName('span')[0].style.bottom="30px";
	}
	if ( cursorposX < 250 ){
		document.getElementsByTagName('span')[0].style.left="125px";
	} else  {
		document.getElementsByTagName('span')[0].style.right="125px";
	}
}, false);


как будет одновременно работать top и bottom(left и right) тоже ещё неизвестно ...
Ответить с цитированием
  #14 (permalink)  
Старый 05.04.2017, 16:00
Профессор
Отправить личное сообщение для Янковиц Посмотреть профиль Найти все сообщения от Янковиц
 
Регистрация: 17.11.2014
Сообщений: 403

Разобьем задачу.
Второе условие поправил:
Если позиция курсора больше, чем высота экрана минус 250 пикселей, то добавляем стиль
<script>
window.addEventListener('mouseover', function(e) {
	var cursorposY = e.pageY;
	var height = document.body.clientHeight;
	var margintop = height - 250;
	if ( cursorposY < 250 ){
		document.getElementsByTagName('span')[0].style.top="30px";
	} else if ( cursorposY > margintop ) {
		document.getElementsByTagName('span')[0].style.bottom="30px";
	}
}, false);
</script>
Ответить с цитированием
  #15 (permalink)  
Старый 05.04.2017, 16:07
Профессор
Отправить личное сообщение для Янковиц Посмотреть профиль Найти все сообщения от Янковиц
 
Регистрация: 17.11.2014
Сообщений: 403

Рони, подскажи. У меня скрипт срабатывает при входе курсора в окно:
window.addEventListener

Как прописать срабатывание на ссылку?

И второе. Стили добавляются для первой ссылки:
document.getElementsByTagName('span')[0].style.top="30px";

Я так понял это из-за нолика. А как сделать, чтобы на какую ссылку навел, в span этой ссылки и добавляется стиль?
Ответить с цитированием
  #16 (permalink)  
Старый 05.04.2017, 16:18
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Янковиц,
window.addEventListener('mouseover', function(e) {
  var el = e.target;
  if(!el.classList.contains("screentip")) return;
  el = el.querySelector("span");
  //...   el.style.top =
}, false);
Ответить с цитированием
  #17 (permalink)  
Старый 05.04.2017, 16:21
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Сообщение от Янковиц
Второе условие поправил:
потом вы вспомните про скролл и в результате код будет как в посте №2
Ответить с цитированием
  #18 (permalink)  
Старый 05.04.2017, 16:29
Профессор
Отправить личное сообщение для Янковиц Посмотреть профиль Найти все сообщения от Янковиц
 
Регистрация: 17.11.2014
Сообщений: 403

Видите ли, во втором посте варианты хороши, но выводятся подсказки в блоке <div class='block'>gbgfgfb</div>
Это один блок на все ссылки. А у меня, блоки подсказки появляются внутри ссылки и на каждую - своя подсказка
Ответить с цитированием
  #19 (permalink)  
Старый 06.04.2017, 02:59
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Позиционирование всплывающей подсказки
Янковиц,
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style>
.screentip{
  position: relative; /* позиционируем */
  display: inline-block;
  background: #eaeaea;
  color: #232323;
  text-decoration: none;
  cursor: help;
  outline: none;
}
.screentip span{
  position: absolute; /* позиционируем */
  z-index: 999; /* выдвигаем на передний план */
  visibility: hidden; /* временно скрываем */
  left: -50px;
}
.screentip:hover{
  border: 0; /* используем если необходим IE6 fix */
  position:relative;
  z-index: 9999;
}
.screentip:hover span{
  visibility: visible; /* отображаем подсказку */
}
p{
  height: 1000px;
  width: 1000px;
}

</style>
 <script>
window.addEventListener('mouseover', function(e) {
  var el = e.target;
  if(!el.classList.contains("screentip")) return;
  var span = el.querySelector("span");
  var pos = el.getBoundingClientRect();
  var left = 12;
  var maxLeft =  pos.left + 12 + span.offsetWidth;
  var width = document.documentElement.clientWidth
  if(maxLeft > width) left = width - maxLeft;
  if(pos.left < 0) left = -pos.left + 6;
  var top = el.offsetHeight + 12;
  var maxTop = pos.top + span.offsetHeight + el.offsetHeight + 12;
  var height = document.documentElement.clientHeight
  if (maxTop > height) top = - span.offsetHeight - 6
  span.style.left = left +"px";
  span.style.top = top +"px";
}, false);
</script>
</head>

<body>
<p></p>
<a href="#" class="ret screentip">ссылка
<span id="texts">Подсказка</span>
</a>
<a href="#" class="ret screentip">ссылка
<span id="texts">Подсказка</span>
</a>
<a href="#" class="ret screentip">ссылка
<span id="texts">Подсказка</span>
</a>
<a href="#" class="ret screentip">ссылка
<span id="texts">Подсказка</span>
</a>
<a href="#" class="ret screentip">ссылка
<span id="texts">Подсказка</span>
</a>
<a href="#" class="ret screentip">ссылка
<span id="texts">Подсказка</span>
</a>
<a href="#" class="ret screentip">ссылка
<span id="texts">Подсказка</span>
</a>
<a href="#" class="ret screentip">ссылка
<span id="texts">Подсказка</span>
</a>
<a href="#" class="ret screentip">ссылка
<span id="texts">Подсказка</span>
</a>
<a href="#" class="ret screentip">ссылка
<span id="texts">Подсказка</span>
</a>
<a href="#" class="ret screentip">ссылка
<span id="texts">Подсказка</span>
</a>
<a href="#" class="ret screentip">ссылка
<span id="texts">Подсказка</span>
</a>
<a href="#" class="ret screentip">ссылка
<span id="texts">Подсказка</span>
</a>
<a href="#" class="ret screentip">ссылка
<span id="texts">Подсказка</span>
</a>
<p></p>
</body>
</html>
Ответить с цитированием
  #20 (permalink)  
Старый 07.04.2017, 19:16
Аспирант
Отправить личное сообщение для serj0110 Посмотреть профиль Найти все сообщения от serj0110
 
Регистрация: 22.10.2016
Сообщений: 32

Я так понимаю ты хочешь чтобы подсказка была по центру экрана, и если я правильно понял, то можно спокойно задать ей абсолютное положение
Блоку под подсказку задать
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;

А самому блоку с подсказкой задать
position: absolute;
top: 30px;
left: 0;
right: 0;
bottom: 0;
margin: 0 auto;
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Реализация всплывающей подсказки shurik_shink Элементы интерфейса 7 16.12.2015 12:42
Фон в виде карты и плавное позиционирование Сергей О. Элементы интерфейса 5 15.02.2013 10:46
Картинка в виде всплывающей подсказки abc_ua Оффтопик 20 03.04.2012 16:32
Как ограничить абсолютное позиционирование верхней границей окна браузера? javascript_pupil (X)HTML/CSS 1 03.03.2012 17:48
скрипт всплывающей подсказки kent666 Events/DOM/Window 0 03.11.2011 17:59