Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Нужна помощь для реализации функции d'n'd (https://javascript.ru/forum/dom-window/9881-nuzhna-pomoshh-dlya-realizacii-funkcii-d%27n%27d.html)

vaal 09.06.2010 16:55

Нужна помощь для реализации функции d'n'd
 
Доброго времени! У меня есть такая задача : есть текст, оформленный в виде нескольких блоков (<div></div>) а так же есть картинка. Необходимо чтобы при перетаскивании этой картинки на какой - то из блоков текста и отпускании картинки он менял свои стилевые свойства (шрифт например). Я нашел вроде рабочий пример d'n'd и изменил там одну функцию, которая отвечает за начало инициализации движения. Потом попыталя сделать так, чтобы при наведении картинки на блок и отпускании кнопки мыши текст менял размер шрифта, но что то не получается. Помогите пожалуйста. Листинг вот:
<html>
<head>
<title>DaD</title>
<script>
// Объявим глобальные переменные
// Переменная состояния, по умолчанию ничего не двигается = false
var moveState = false;
// Переменные координат мыши в начале перемещения, пока неизвестны
var x0, y0;
// Начальные координаты элемента, пока неизвестны
var divX0, divY0;

//это картинка тоже в отдельном блоке
// Добавим прямо в DIV обработчики событий
document.write(
    "<div id=a\
        style='position:absolute;left:50;top:50;' \
        onmousedown = 'initMove(this, event);' \
        onmouseup = 'StartLocation(this);' \
        onmousemove = 'moveHandler(this, event);' \
    ><img src=font_n.jpg name=a></div>"
);

// Объявим функцию для определения координат мыши
function defPosition(event) {
    var x = y = 0;
    if (document.attachEvent != null) { 
        x = window.event.clientX + document.documentElement.scrollLeft + document.body.scrollLeft;
        y = window.event.clientY + document.documentElement.scrollTop + document.body.scrollTop;
    }
    return {x:x, y:y};
}



// Функция инициализации движения
// Записываем всё параметры начального состояния
function initMove(div, event) {
    var event = event || window.event;
    x0 = defPosition(event).x;
    y0 = defPosition(event).y;
    divX0 = 50;
    divY0 = 50;
    moveState = true;
}
//тут я добавил сам
// Если клавишу мыши отпустили вне элемента движение должно прекратиться
 function StartLocation(div) {
//здесь картинка возвращается на исходное место 
    divX0 = 50;
    divY0 = 50;
    div.style.left=divX0;
    div.style.top=divY0;
    moveState = false;
//эта функция как я понимаю должна возвраитить id элемента на котром произошло событие 
    var eid=window.event.srcElement.id;
//эта функция изменяет шрифт на 16
    document.getElementbyId(eid).fontsize="16";
}


// Функция обработки движения:
function moveHandler(div, event) {
    var event = event || window.event;
    if (moveState) {
        div.style.left = divX0 + defPosition(event).x - x0;
        div.style.top  = divY0 + defPosition(event).y - y0;
    }
}
</script>
</head>
<body>

<br>
<br>
<br>
<br>
<br>
<br>
<br>
//здесь определяем что по отпускании нажатой левой кнопки мыши я 
//вызываю функцию StartLocation
<div id="1" onmouseup="StartLocation(this.id);"><dd>
Имя Андрея Поздеева относится к наиболее значительным в истории русского искусства ХХ столетия. Это тем более важно понять, так как Андрей Поздеев не принадлежал к столичному кругу авангарда 60 - 80-х годов, а следовательно, не имел такой художественной среды, в которой вольно или невольно прокручиваются близкие творческие идеи, имеется круг почитателей, способных поддерживать художника, раскручивать его имя и создавать условия для развития.
</div>

<div id="2" onmouseup="StartLocation(this.id);" ><dd>
Андрей Поздеев - коренной сибиряк.  Среди его предков были кузнецы и столяры, один из прадедов был ссыльным поляком. Андрей Геннадьевич Поздеев родился 27 сентября 1926 года в селе Нижний Ингаш Красноярского края в семье почтового служащего Поздеева Геннадия Даниловича и его жены Евдокии Ивановны.
</div>

Skipp 09.06.2010 16:58

Цитата:

но что то не получается
А что именно то не получается?

vaal 09.06.2010 17:00

при наведении картинки и отпускании нажатой левой кнопки мыши текст не меняет шрифт. Это я реализовывал в функции StartLocation, посмотрите может так что неправильно или не хватает чего - нибудь.

Skipp 09.06.2010 17:13

правильно не меняет onmouseup срабатывает на картинке, а не на div

vaal 09.06.2010 17:27

Понял. А как перехватить еще и id div'a текста? Просто никаких мыслей в голову не приходит тогда получается где не отпускай у меня все равно onmousemove будет на картинке срабатывать а не на тесте, так как курсор на картинке находился. У меня была идея если при отпускании клавиши запоминать координаты мыши и в зависимости от координат просто менять стилевые свойства элемента, если координаты мыши попадут под диапазон его координат. НО это ведь тогда получается что и в d'n'd смысла нет, и замудрено сильно. Помогите может кто сталкивался с такой задачей.


Часовой пояс GMT +3, время: 11:40.