Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Не срабатывает elem.style.left при первом использовании элемента

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Romeo4755
Отправлено: 16 Апреля, 2016 - 18:08:12
Post Id


Новичок


Покинул форум
Сообщений всего: 16
Дата рег-ции: Окт. 2015  


Помог: 0 раз(а)




Здравствуйте. Есть элемент:
CODE (html):
скопировать код в буфер обмена
  1. <button type="button" draggable="true" class="wordbutton" id="textlin11" ondragstart="startdraging(this.id)" ondragend="newposition(this.id)" ondrag="beingdragged (this.id)">текст My big text</button>


При первом ondragstart позиция элемента (elem.style.left или elem.style.top) - пуста, вообще ничего alert не пишет. Если отпустить элемент и снова начать его тащить - все нормально. Если выбирать и таскать другие элементы, а потом вернуться к заданному - тоже все нормально. Но после загрузки страницы, когда в первый раз пытаешься тащить - координаты элемента через elem.style не определяются. Алерт показывает, что сам элемент определяется правильно.
Пробую в разных браузерах.
Что такое?

Вот начало обработчик (стандартный) (поправка, чтобы элемент таскался за то место, за которое его взяли, а не за угол):
CODE (javascript):
скопировать код в буфер обмена
  1. function startdraging (elemId) {
  2.   var elem = document.getElementById(elemId);
  3.   var event = event || window.event;
  4.  
  5. var inncurX = event.clientX;
  6. var inntim = parseInt (elem.style.left);
  7. //alert (elem.style.left);
  8.  
  9. if (!isNaN(inntim)) {popravka_drag_X = inncurX  - inntim;} else {popravka_drag_X = 0;}
  10.  
  11. var inncurY = event.clientY;
  12. var inntim = parseInt (elem.style.top);
  13. if (!isNaN(inntim)) {popravka_drag_Y = inncurY  - inntim;} else {popravka_drag_Y= 0;}
  14. }

(Отредактировано автором: 16 Апреля, 2016 - 18:09:17)

 
 Top
Pinkya_rabbit
Отправлено: 16 Апреля, 2016 - 21:17:37
Post Id



Новичок


Покинул форум
Сообщений всего: 17
Дата рег-ции: Апр. 2016  
Откуда: Minsk перебираюсь в Питер


Помог: 1 раз(а)




Ну давайте размышлять логически. Свойства к элементу у вас прикрепляются, стало быть функция на него срабатывает. Почему может не срабатывать свойство left изначально. Согласно w3c этим свойством обладают все элементы, которые позиционированы как relative, absolute, или fixed. попробуйте ему в стилях его позиционировать. Например position:relative

(Отредактировано автором: 16 Апреля, 2016 - 21:18:57)

 
My status
 Top
Romeo4755
Отправлено: 16 Апреля, 2016 - 23:29:08
Post Id


Новичок


Покинул форум
Сообщений всего: 16
Дата рег-ции: Окт. 2015  


Помог: 0 раз(а)




Мда. Логически рассуждать тут у меня не получается. Действительно, свойство left не должно отсутствовать.
В стилях стоит absolute, замена на relative дела не меняет.

Однако!
После того, как панелям назначили места, отличные от указанного в стилях, проблема пропала.
В стиле:
CODE (html):
скопировать код в буфер обмена
  1. .wordpanel {
  2.    position: absolute;
  3.    top: 150px; left: 55px; z-index: 5; }


В JS при начальной расстановке панелей:
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2.   document.getElementById("wordpanel"+i).style.top = correctwordvertposition [i] +"px";
  3.   document.getElementById("wordpanel"+i).style.left = correctwordhorposition [i] +"px";


Теперь сразу все таскается за нужное место.
Причем, если закомментить одну из строчек указанных - соответствующее качество слетит и с первой попытки панелька под курсором будет глючить вертикально или горизонтально при первом перетаскивании.
 
 Top
Pinkya_rabbit
Отправлено: 17 Апреля, 2016 - 02:41:31
Post Id



Новичок


Покинул форум
Сообщений всего: 17
Дата рег-ции: Апр. 2016  
Откуда: Minsk перебираюсь в Питер


Помог: 1 раз(а)




Я почитал ещё и вот что начитал. На том же w3c. Я во многом ещё учусь, многого не понимаю. В общем, если не задать при позиционировании элемента значение позиции, как сделал ты, то тогда, для left значение устанавливается initial. initial - это не значение, заданное браузером, а значение по умолчанию для элемента HTML, определённое в спецификации CSS. Оно не зависит ни от браузера, ни от наследования. значение для параметра left пустое. поэтому ты получал пустоту, если не задать параметры. я конечно нуб =) но мне не стыдно за это. это было интересно столько всего поначитал

(Отредактировано автором: 17 Апреля, 2016 - 02:42:14)

 
My status
 Top
Romeo4755
Отправлено: 18 Апреля, 2016 - 15:18:29
Post Id


Новичок


Покинул форум
Сообщений всего: 16
Дата рег-ции: Окт. 2015  


Помог: 0 раз(а)




Pinkya_rabbit пишет:
Я почитал ещё и вот что начитал. На том же w3c. Я во многом ещё учусь, многого не понимаю. В общем, если не задать при позиционировании элемента значение позиции, как сделал ты, то тогда, для left значение устанавливается initial. initial - это не значение, заданное браузером, а значение по умолчанию для элемента HTML, определённое в спецификации CSS. Оно не зависит ни от браузера, ни от наследования. значение для параметра left пустое. поэтому ты получал пустоту, если не задать параметры. я конечно нуб =) но мне не стыдно за это. это было интересно столько всего поначитал

Спасибо большое за информацию. Подтверждает мои выводы. Позиции были установлены - но в css (для всех панелей - одно место, просто для того, чтобы начальное значение БЫЛО). Такой подлости JS, видимо не ожидал.
Все время попадаю пальцем в эти разрывы между html, js и css - причем не в описанные специфики и различия и не в проблемы, вызванные порядком создания элементов, а именно в непредусмотренные разработчиками случаи. Я берусь за веб редко - для перенесения программ Дельфи онлайн, так что за всем не уследишь.

(Отредактировано автором: 18 Апреля, 2016 - 15:19:55)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« JavaScript & VBScript »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB