Модераторы: Sardar, Aliance

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Слой не двигается, при наведении мышью 
:(
    Опции темы
Lance
Дата 4.6.2005, 20:30 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Задача состоит в том, чтобы при наведении курсором мыши на слой div он передвигался. Я не пойму, что у меня не так. Я отслеживаю координаты мышиной стрелки, и если ее координаты совпадают с координатами слоя, то он двигается (то есть его (слоиные) координаты меняются). Это все я записал в функцию, а ее поставил на событие onMouseMove.
Вот оригинальный код. Подскажите, пожалуйста, что я делаю не так.

Код


<html> 
<head> 
<title>Move</title> 

<script language="JavaScript"> 

function mov(){ 

var tx= document.getElementById("tab").style.left; 
var ty= document.getElementById("tab").style.top; 
mx= event.x; 
my= event.y; 
document.getElementById("txt").value= "mx:"+mx+" my:"+my+" tx:"+tx+" ty:"+ty; 

while (my>=ty & my<=ty+50 & mx>=tx & mx<=tx+50) 
{document.getElementById("tab").style.top+=50; document.getElementById("tab").style.left+=50} 
} 
</script> 
</head> 
<body onMouseMove="mov()"> 

<div id="tab" style="position: absolute; left: tx; top: ty; background-color: buttonface; width: 50; height: 50; border-style: outset"></div> 
<textarea id="txt" cols="50" rows="1"> 
</textarea> 

</body> 
</html> 


И еще. Раз уж пишу. Помогите вылечить. Скопируйте код, запустите, там станет все понятно.
Код



<html> 
<head> 
<title>Untitled</title> 
<script language="JavaScript"> 
function les(obj){ 
obj.hren.value-=1; 
} 
function mor(obj) { 
obj.hren.value+=1; 
} 
</script> 

</head> 

<body> 
<strong>Интересный факт: когда нажимаешь Less, то число уменьшается на 1, а когда нажимаешь на More, то вместо того, чтобы прибавить 1, единица дописывается. Хотя разница в коде лишь в "+" и "-". В чем дело?</strong> 
<form name="form1"> 
<input type="button" name="less" value="Less" onClick="les(form1)"> 
<input type="button" name="more" value="More" onClick="mor(form1)"><br> 
<input type="text" name="hren" value="10" readonly> 
</form> 


</body> 
</html> 

Заранее благодарю.

  Вверх
batigoal
Дата 4.6.2005, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 1
Всего: 151



Насчет второго - лечится заменой
Код

obj.hren.value+=1;


на

Код

obj.hren.value = parseInt(obj.hren.value)+1; 


Насчет первого - ждем кого поумнее smile


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Ciber SLasH
Дата 5.6.2005, 00:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1813
Регистрация: 9.11.2004
Где: С.-Петербург

Репутация: 24
Всего: 67



2Lance:
Попробуй это:
Код

<html>
<head>
<title>Move</title>
<script language="JavaScript">
function mov(evt){
var tab = document.getElementById("tab");
var tx = parseInt(tab.style.left);
var ty = parseInt(tab.style.top);
var mx = evt.x;
var my = evt.y;

  document.getElementById("txt").value = "mx: "+mx+"; my: "+my+"; tx: "+tx+"px; ty: "+ty+"px";
  if ( (my >= ty) && (my <= ty+50) && (mx >= tx) && (mx <= tx+50) ) {
    tab.style.top = ty+(my-ty)-25;
    tab.style.left = tx+(mx-tx)-25;
  }
}
</script>
</head>
<body onMouseMove="mov(event)">
<div id="tab" style='position: absolute; left: 50px; top: 50px; width: 50px; height: 50px; background-color: buttonface; border-style: outset'></div>
<input id="txt" type=text size=40>
</body>
</html>

а в твоём примере были такие ошибки:
1) оператор while -- надо if
2) в условии, вместо одного & нужно два &&
3) зачем по 100 раз обращаться к document.getElementById(), когда можно один раз записать результат в переменную и в дальнейшем юзать эту переменную
4) style.left и style.top имеют строковый тип, поэтому нужно сначала преобразовать в цифирь, а потом уже манипулировать этими свойствами

Это сообщение отредактировал(а) Ciber SLasH - 5.6.2005, 00:31
PM   Вверх
Sardar
Дата 5.6.2005, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



А если ещё понять что конкретно нужно, то наверное решим ловить mousemove на самом квадаратике а не на всём документе smile


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Aliance
Дата 5.6.2005, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



И я бы координаты читал по совместимее бы...
Пример можно взять отсюда.
PM MAIL WWW ICQ Skype   Вверх
Guest
Дата 6.6.2005, 10:42 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











2Lamer George
А я эту проблему решил так. Я не
Код

obj.hren.value = parseInt(obj.hren.value)+1; 


использовал, а вот так:
Код

x=obj.hren.value;
x= Math.pow(x,1)+1;
obj.hren.value=x;


Помудреней немного, но тоже работает smile

2Ciber SLasH
Большое спасибо за такой подробный ответ. Все работает, все свои ошибки я осознал. smile А что, всегда надо ставить две штуки &&? И еще: разве нельзя написать эту строчку:

Код

if ( (my >= ty) && (my <= ty+50) && (mx >= tx) && (mx <= tx+50) )

Вот так:
Код

if (my>-ty && my<=ty+50 && my>-tx && mx<=tx+50)

?
Чтобы со скобками не париться. Ну и опять же все тот же вопрос: обязательно две штуки & ставить? Я писал одну и все работало.

Ну и последний вопрос у меня на сегодня. smile
Что такое в JavaScript "?" (знак вопроса)? Что он заменяет и как им пользоваться? Кажется, там что-то с if'ами связано. Подскажите.
  Вверх
batigoal
Дата 6.6.2005, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 1
Всего: 151



Цитата(Guest @ 6.6.2005, 11:42)
Что такое в JavaScript "?" (знак вопроса)? Что он заменяет и как им пользоваться? Кажется, там что-то с if'ами связано. Подскажите.

Если не ошибаюсь, в JS, как и в Java, есть тернарный оператор проверки условия. Пример:
Код

x = ( y>0 ? 1 : 0 )

Соответственно, если y>0, то х получит значение 1, иначе - ноль.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Aliance
Дата 6.6.2005, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



Цитата(Guest @ 6.6.2005, 11:42)
Что такое в JavaScript "?" (знак вопроса)? Что он заменяет и как им пользоваться? Кажется, там что-то с if'ами связано. Подскажите.

Lamer George все правельно сказал, немного по-понятнее объясню smile
Код

var color = (temperature > 100) ? "red" : "blue";

// аналогично такому:

var color;
if (temperature > 100) {
   color = "red";
} else {
   color = "blue";
}


Кстати, этот оператор называется “ ? : ”
PM MAIL WWW ICQ Skype   Вверх
Ciber SLasH
Дата 6.6.2005, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1813
Регистрация: 9.11.2004
Где: С.-Петербург

Репутация: 24
Всего: 67



Цитата(Guest @ 6.6.2005, 11:42)
А что, всегда надо ставить две штуки &&?

&& - Логический оператор AND. Этот оператор проверяет два Boolean выражения на истинность.
& - Поразрядный оператор AND. Этот оператор выполняет бинарную математику на двух операндах (на их двоичных значениях).
Цитата(Guest @ 6.6.2005, 11:42)
Чтобы со скобками не париться.

Можно их не ставить в данном случае, просто мне так удобно (со скобками). smile
PM   Вверх
Aliance
Дата 6.6.2005, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



Немного раскрою пошире:

Цитата(Ciber @ 6.6.2005, 18:24)
Этот оператор проверяет два Boolean выражения на истинность.

Если быть точным, то этот оператор проверяет левый операнд, если тот равен (или может быть преобразован) false - то оператор возвращает его значение, в противном случае значение правого операнда.

Цитата(Ciber @ 6.6.2005, 18:24)
Этот оператор выполняет бинарную математику на двух операндах (на их двоичных значениях).

А этот оператор сравнивает два операнда по каждому биту. Бит результата равен 1, только если равны 1 соответствующие биты обоих операндов.
PM MAIL WWW ICQ Skype   Вверх
Sardar
Дата 6.6.2005, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Цитата(Guest @ 6.6.2005, 09:42)
использовал, а вот так:

Так лучше не делать, это всё равно что забивать гвозди цифровой камерой smile

По логическому складыванию верно описал Aliance, очень удобный оборот:
Код
//аргумент arg2 опционален
function func(arg1, arg2) {
  arg2=arg2||"дефолтовое значение";
  alert(arg2);
}

Если второй аргумент не задан, то берём значение по дефолту. Хорошо бы взять учебник, всего 2 часа времени займёт smile


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Lance
Дата 6.6.2005, 19:44 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Уф, я даже и не ожидал такого потока ответов и так быстро. Надо этот форум в Favorites кинуть. smile
Всем большое спасибо за столь исчерпывающие ответы.
Теперь буду пользоваться оператором "? :" smile
  Вверх
Aliance
Дата 6.6.2005, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



Ради вам помочь. Привыкайте, у нас всегда так - быстро и качественно smile
Не забывайте регистрироваться smile
PM MAIL WWW ICQ Skype   Вверх
Lance
Дата 10.6.2005, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 6.6.2005

Репутация: нет
Всего: нет



Следующий вопрос может показаться глупым: как сделать проверку на тип и версию браузера. Итак, код
Код

<html>
<head>
    <title>Untitled</title>
<META http-equiv=content-type content="text/html; charset=windows-1251">

<script language="JavaScript">
if (window.navigator.appName=="Microsoft Internet Explorer") alert('Хороший браузер');
 else if (window.navigator.appName!="Microsoft Internet Explorer") alert(window.navigator.appName+" не подходит для этой игры")
</script>
</head>

<body>
</body>
</html>


якобы демонстрирует проверку браузера (надеюсь, в этой части я все правильно сделал), но тут всплывают две проблемы:
  • Когда я открываю этот файл Оперой, то он мне спокойно так говорит, что у меня IE. Кхм, нехорошо получается. Этого мне совсем не надо.
  • Как сделать проверку именно на версию браузера? То есть мне нужно пропустить юзера, только если у него IE 5.5 и выше. Как такое можно сделать?
smile А можно узнать, куда мой оффтопик переместили? smile
Заранее благодарю.
PM MAIL   Вверх
Ciber SLasH
Дата 10.6.2005, 23:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1813
Регистрация: 9.11.2004
Где: С.-Петербург

Репутация: 24
Всего: 67



Проверка на IE5+
Код

isMSIE5 = window.clipboardData && document.all && document.getElementById;
if (isMSIE5) alert('IE5+')
else alert('Это не IE5+')

PM   Вверх
Aliance
Дата 11.6.2005, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



Lance
Тему закрываю. Прочти правила форума:
Модератор: Пожалуйста, один топик - один вопрос.
PM MAIL WWW ICQ Skype   Вверх
Страницы: (2) [Все] 1 2 
Закрытая темаСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0605 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.