Invalid argument в IE
Написал функцию передвижения дива мышкой, во всех браузерах всё работает отлично, но в IE проблема =(
ругается на 29 строку
function move(div)
{
document.onmousedown = function() {return false}
div.style.cursor = 'move';
document.onmousemove = function(e)
{
if(event.pageX == null)
{
var html = document.documentElement
var body = document.body
event.pageX = event.clientX + (html && html.scrollLeft || body && body.scrollLeft || 0) - (html.clientLeft || 0)
}
x = event.pageX;
left = div.offsetLeft;
left = x - left;
var shelf = document.getElementById('shelf');
var slide = div.offsetWidth / 2;
var id = 0;
var bookId;
var tmp = 0;
var move = 0;
document.onmousemove = function(e)
{
div.style.zIndex = 100;
x = event.pageX;
div.style.left = x - left + 'px';
toolTip();
var book1 = document.getElementById('book1').offsetLeft;
var book2 = document.getElementById('book2').offsetLeft;
var book3 = document.getElementById('book3').offsetLeft;
var book4 = document.getElementById('book4').offsetLeft;
|
div.style.left = (x - left) + 'px';
|
пробовал, не помогает
|
alert(typeof(toolTip)); - вместо - чо говорит ?
Ксать выложите эту функцию |
алерт говорит function
function toolTip(msg)
{
floatTipStyle = document.getElementById("floatTip").style;
if (msg)
{
document.getElementById("floatTip").innerHTML = msg;
floatTipStyle.display = "block";
}
else
{
floatTipStyle.display = "none";
}
}
|
так аргумент то не передали
попробуйте toolTip(0) |
так мне и нужно чтобы когда move(div) работает, toolTip(msg) Не работала
|
Цитата:
toolTip(0) |
тоже не помогает
|
какой тогда смысл в этой функции-уберите отсюда 29 строку
или я что то не понимаю |
смысл в этой функции есть, убирать её не нужно, нужно чтобы IE перестал к ней предираться
|
ругается он на
div.style.left = (x - left) + 'px'; |
Цитата:
|
выше
left = div.offsetLeft; left = x - left; |
может ему + 'px' не нравится?
|
Цитата:
|
кажется нашёл в чём проблема, после
event.pageX = event.clientX + (html && html.scrollLeft || body && body.scrollLeft || 0) - (html.clientLeft || 0); и x = event.pageX; алерт х всё равно undefined =( |
а где у Вас традиционные
e=e||window.event; а у Вас просто event |
Попробуйте так
if(event.pageX == null)
{
var html = document.documentElement
var body = document.body
x = event.clientX + (html && html.scrollLeft || body && body.scrollLeft || 0) - (html.clientLeft || 0)
} else
x = event.pageX;
|
исправил, получилось вот так
function move(div)
{
document.onmousedown = function() {return false}
div.style.cursor = 'move';
document.onmousemove = function(e)
{
e=e||window.event;
if(e.pageX == null)
{
var html = document.documentElement
var body = document.body
e.pageX = e.clientX + (html && html.scrollLeft || body && body.scrollLeft || 0) - (html.clientLeft || 0);
}
x = e.pageX;
left = div.offsetLeft;
left = x - left;
var shelf = document.getElementById('shelf');
var slide = div.offsetWidth / 2;
var id = 0;
var bookId;
var tmp = 0;
var move = 0;
document.onmousemove = function(e)
{
e=e||window.event;
if(e.pageX == null)
{
var html = document.documentElement
var body = document.body
e.pageX = e.clientX + (html && html.scrollLeft || body && body.scrollLeft || 0) - (html.clientLeft || 0);
}
div.style.zIndex = 100;
x = e.pageX;
div.style.left = x - left + 'px';
теперь див двигается, но не отпускается >_< как я ненавижу IE |
в исходном примере с 8 по 15 строку замените тем, что я написал
|
в этом фрагменте теперь проблем нет, теперь проблемы в другом месте =(
|
а теперь дорабатывайте e = e || event
|
сейчас проблема тут в строке 1-3 "Требуется объект"
var book = document.getElementById(bookId).offsetLeft;
if(move == 1)
{
if(tmp == 1)
{
var i = book;
if(book - shelf.offsetLeft + 5 >= div.offsetWidth + 20)
var j = book - div.offsetWidth + 20;
else
{
if(book - shelf.offsetLeft + 5 < div.offsetWidth + 20)
var j = shelf.offsetLeft + 4;
}
}
else
{
if(tmp == 2)
{
var i = book;
if(shelf.offsetLeft + shelf.offsetWidth - book - 5 >= div.offsetWidth + 20)
var j = book + div.offsetWidth - 20;
else
{
if(shelf.offsetLeft + shelf.offsetWidth - book - 5 < div.offsetWidth + 20)
var j = shelf.offsetLeft + shelf.offsetWidth - div.offsetWidth - 4;
}
}
}
if(j > shelf.offsetLeft + shelf.offsetWidth - div.offsetWidth - 4)
j = shelf.offsetLeft + shelf.offsetWidth - div.offsetWidth - 4;
t1A = new Tween(document.getElementById(bookId).style,'left',Tween.strongEaseOut,i,j,0.5,'px');
t1A.start();
tmp = 0;
move = 0;
}
}
}
}
|
Были только книги, теперь
PS: при отсутствии полного кода примера смотреть не айс |
у меня книжная полка, по которой я двигаю книги(дивы)
сейчас напишу полный код функции, он просто довольно длинный |
function move(div)
{
document.onmousedown = function() {return false}
div.style.cursor = 'move';
document.onmousemove = function(e)
{
e=e||window.event;
if(e.pageX == null)
{
var html = document.documentElement
var body = document.body
e.pageX = e.clientX + (html && html.scrollLeft || body && body.scrollLeft || 0) - (html.clientLeft || 0);
}
x = e.pageX;
left = div.offsetLeft;
left = x - left;
var shelf = document.getElementById('shelf');
var slide = div.offsetWidth / 2;
var id = 0;
var bookId;
var tmp = 0;
var move = 0;
document.onmousemove = function(e)
{
e=e||window.event;
if(e.pageX == null)
{
var html = document.documentElement
var body = document.body
e.pageX = e.clientX + (html && html.scrollLeft || body && body.scrollLeft || 0) - (html.clientLeft || 0);
}
div.style.zIndex = 100;
x = e.pageX;
div.style.left = x - left + 'px';
toolTip(0);
var book1 = document.getElementById('book1').offsetLeft;
var book2 = document.getElementById('book2').offsetLeft;
var book3 = document.getElementById('book3').offsetLeft;
var book4 = document.getElementById('book4').offsetLeft;
if(div.offsetLeft <= shelf.offsetLeft + 5)
div.style.left = shelf.offsetLeft + 5 + 'px';
if(div.offsetLeft + div.offsetWidth >= shelf.offsetLeft + shelf.offsetWidth - 5)
div.style.left = shelf.offsetLeft + shelf.offsetWidth - div.offsetWidth - 5 + 'px';
//book1////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if(div.offsetLeft + slide > book1 + slide && div.offsetLeft + slide < book1 + slide + 5) tmp = 1;
if(div.offsetLeft + slide < book1 + slide && div.offsetLeft + slide > book1 + slide - 5) tmp = 2;
if(div.offsetLeft + slide > book1 + slide + 5 && div.offsetLeft + slide < book1 + slide + 10 && tmp == 1)
{id = 1; bookId = 'book'+id; move = 1;}
if(div.offsetLeft + slide < book1 + slide - 5 && div.offsetLeft + slide > book1 + slide - 10 && tmp == 2)
{id = 1; bookId = 'book'+id; move = 1;}
//book2////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if(div.offsetLeft + slide > book2 + slide && div.offsetLeft + slide < book2 + slide + 5) tmp = 1;
if(div.offsetLeft + slide < book2 + slide && div.offsetLeft + slide > book2 + slide - 5) tmp = 2;
if(div.offsetLeft + slide > book2 + slide + 5 && div.offsetLeft + slide < book2 + slide + 10 && tmp == 1)
{id = 2; bookId = 'book'+id; move = 1;}
if(div.offsetLeft + slide < book2 + slide - 5 && div.offsetLeft + slide > book2 + slide - 10 && tmp == 2)
{id = 2; bookId = 'book'+id; move = 1;}
//book3////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if(div.offsetLeft + slide > book3 + slide && div.offsetLeft + slide < book3 + slide + 5) tmp = 1;
if(div.offsetLeft + slide < book3 + slide && div.offsetLeft + slide > book3 + slide - 5) tmp = 2;
if(div.offsetLeft + slide > book3 + slide + 5 && div.offsetLeft + slide < book3 + slide + 10 && tmp == 1)
{id = 3; bookId = 'book'+id; move = 1;}
if(div.offsetLeft + slide < book3 + slide - 5 && div.offsetLeft + slide > book3 + slide - 10 && tmp == 2)
{id = 3; bookId = 'book'+id; move = 1;}
//book4////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if(div.offsetLeft + slide > book4 + slide && div.offsetLeft + slide < book4 + slide + 5) tmp = 1;
if(div.offsetLeft + slide < book4 + slide && div.offsetLeft + slide > book4 + slide - 5) tmp = 2;
if(div.offsetLeft + slide > book4 + slide + 5 && div.offsetLeft + slide < book4 + slide + 10 && tmp == 1)
{id = 4; bookId = 'book'+id; move = 1;}
if(div.offsetLeft + slide < book4 + slide - 5 && div.offsetLeft + slide > book4 + slide - 10 && tmp == 2)
{id = 4; bookId = 'book'+id; move = 1;}
var book = document.getElementById(bookId).offsetLeft;
if(move == 1)
{
if(tmp == 1)
{
var i = book;
if(book - shelf.offsetLeft + 5 >= div.offsetWidth + 20)
var j = book - div.offsetWidth + 20;
else
{
if(book - shelf.offsetLeft + 5 < div.offsetWidth + 20)
var j = shelf.offsetLeft + 4;
}
}
else
{
if(tmp == 2)
{
var i = book;
if(shelf.offsetLeft + shelf.offsetWidth - book - 5 >= div.offsetWidth + 20)
var j = book + div.offsetWidth - 20;
else
{
if(shelf.offsetLeft + shelf.offsetWidth - book - 5 < div.offsetWidth + 20)
var j = shelf.offsetLeft + shelf.offsetWidth - div.offsetWidth - 4;
}
}
}
if(j > shelf.offsetLeft + shelf.offsetWidth - div.offsetWidth - 4)
j = shelf.offsetLeft + shelf.offsetWidth - div.offsetWidth - 4;
t1A = new Tween(document.getElementById(bookId).style,'left',Tween.strongEaseOut,i,j,0.5,'px');
t1A.start();
tmp = 0;
move = 0;
}
}
}
}
|
проблема насколько я понял в 89 строке, но какой объект ему нужен?
|
Ну потестируйте alert-ом какие параметры на каком шаге получаются (я именно так проверил какое значение получает event.pageX в первой ситуации), получает ли book нужное значение или нет и т.п.
PS: и не забудьте доработать последний пример на предмет первой ситуации |
и book и bookId и move получают нужные значения
|
тогда проблема не в 89 строке, смотрим дальше (проверьте полки)
|
Кстати, откуда вообще сведения об ошибках получаете?
|
bes,
в IE начинаю двигать книгу, в левом нижнем углу появляется иконка Error on page. при нажатии на неё показываются детали |
Потестите в хроме (нажмёте F12, там разберетесь, где смотреть (смотреть console)), покажет тип ошибки, на ссылку справа в строке ошибки нажмёте кинет на строку с ошибкой (если сможет определить)
|
в хроме ошибок нету, там всё отлично работает, ошибки только в IE ниже 9й версии
|
В IE похуже будет, если полки получаются, то вроде только Tween остаётся проверьте его.
|
по функционалу вся функция работает, но по идее когда срабатывает onMouseUp функция должна прекращаться, но она работает дальше...
|
Всем большое спасибо!
проблему решил, мешал div.style.zIndex = 'auto'; в другой функции |
| Часовой пояс GMT +3, время: 01:19. |