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, время: 02:05. |