Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: DRAGGABLE перетягивать слой над которым есть другое слой с больший z-index. Как?
 
 автор: vilk   (10.05.2010 в 15:45)   письмо автору
 
 

Подключил draggable (скачал тут -http://jqueryui.com/download) для того чтобы можно было перетаскивать изображение в определенном блоке. Изображение перетягивается хорошо но если над ним слой у которого больший z-index, тогда нижний слой с изображением не перетаскивается. Скажите пожалуйста как можно сделать так чтобы при нажатии на верхний слой (с большим z-index) было воздействие на нижный слой?

Примем как сейчас работает можно посмотреть тут -
http://www.vlb.org.ua/new/DRAGGABLE1.7.3/jquery-ui-1.7.3.custom/development-bundle/demos/draggable/mytest.php

  Ответить  
 
 автор: АЯ   (11.05.2010 в 03:10)   письмо автору
 
   для: vilk   (10.05.2010 в 15:45)
 

Всё примитивно:
- отслеживаете опускание кнопки мыши по документу;
- определяете фактическое положение передвигаемой картинки в момент опускания кнопки мыши;
- если мышь в этот момент над картинкой, подключаете функцию движения;
- при отпускании кнопки мыши функцию движения отключаете.

На чистом JScript'e это всё реализуется в 10-15 строчек кода.

Но для Вас, как я понимаю, нужно именно с jquery, ибо без этих "костылей" Вы свою жизнь уже не представляете.
А с этим я Вам помочь не могу, ибо сам не пользую и другим не рекомендую.

  Ответить  
 
 автор: vilk   (11.05.2010 в 12:42)   письмо автору
 
   для: АЯ   (11.05.2010 в 03:10)
 

Мне подойдет решение и без jquery просто сам скрипт который перетягивает написан на jquery. Но ведь jquery этот тот же самый javascript так что думаю это не проблема. Буду очень благодарен за пример в javascrpt

  Ответить  
 
 автор: АЯ   (11.05.2010 в 18:46)   письмо автору
 
   для: vilk   (11.05.2010 в 12:42)
 

Смотрите http://codecenter.awardspace.com/teleparus.html

Примечание: картинки с телефоном и с парусником в фотошопе увеличил до нужных размеров.
Парусник, в принципе, можете не увеличивать, а вот с телефоном - обязательно надо пускать фоном, иначе в Опере срабатывает "неубиваемый" запрет на drag.

И, заметьте, - ни один z-index не пострадалне использовался :-)

  Ответить  
 
 автор: vilk   (11.05.2010 в 20:13)   письмо автору
 
   для: АЯ   (11.05.2010 в 18:46)
 

О. Спасибо.

[поправлено модератором]

  Ответить  
 
 автор: АЯ   (11.05.2010 в 20:59)   письмо автору
 
   для: vilk   (11.05.2010 в 20:13)
 

[поправлено модератором]

  Ответить  
 
 автор: vilk   (12.05.2010 в 09:00)   письмо автору
 
   для: АЯ   (11.05.2010 в 20:59)
 

Ок. Еще раз большое спасибо.

Еще есть вопрос -
В конце я изменил код так -


<div style="position:relative" style="height:200px;">
<br><br>
</div>

<div style="position:relative">
<div id="iLIMIT"></div>
<img id="iPARUS" src="/img/timg/977.png" ondragstart="return false">
<div id="iTELEF"></div>
</div>


я поместил дивы в контейнер - <div style="position:relative"> и выше дивов добавил еще один див с высотой на 200px. При таком раскладе когда я начинаю перемещять картинку. Картинка смещяется на 200px пикселов ниже чем она должна быть(то есть появляется смещение от дива с бордером). Скажите пожалуйста, что нужно сделать чтобы перемещалось только в диве с бордером без смещение и при таком раскладе.

[поправлено модератором]

  Ответить  
 
 автор: АЯ   (13.05.2010 в 01:38)   письмо автору
 
   для: vilk   (12.05.2010 в 09:00)
 

Не смогли бы Вы выложить Ваш вариант на тот же (или иной) адрес в сети - а то я как-то плохо себе представляю Вашу новую проблему.

[Как-то я поздно заметил обновление в этой теме.]

  Ответить  
 
 автор: vilk   (13.05.2010 в 07:10)   письмо автору
 
   для: АЯ   (13.05.2010 в 01:38)
 

Cпасибо, что написали. Я выставил тут - http://freesoftspace.com/new/untitled1.php.
То есть моя цель такая чтобы я мог поместить этот код во вложенный див или в таблицу и при движение парус всеравно оставался в пределах дива в котором он должен перемещаться.
Изначально как загрузить документ картинка не смещается. Но когда начать двигать парус он сразу смещается ниже чем нужно.

  Ответить  
 
 автор: АЯ   (13.05.2010 в 10:01)   письмо автору
 
   для: vilk   (13.05.2010 в 07:10)
 

В общем, если объяснить очень по-простому, то проблема заключается в том, что по уму элементы с абсолютным позиционированием как бы нельзя помещать внутрь элементов с относительным позиционированием.

Но, раз уж Вы собираетесь так делать, то можно это дело откорректировать.

Для этого:

1) Тому элементу, внутрь которого будете помещать три элемента (iLIMIT, iPARUS, iTELEF) - а это у вас может быть див или ячейка таблицы (а в принципе - ЛЮБОЙ блочный элемент) надо присвоить свой уникальный id.
Для выложенного у Вас кода пусть это будет так:
<div id="iSHELL" style="position:relative; height=500px;">

2) Внутрь скриптового блока (положим, непосредственно перед закрывающим тегом </script>) надо поместить следующие пять строк:
onload = function ()
{
var obj = document.getElementById ('iSHELL');
   while (obj.offsetParent){correctT -= obj.offsetTop; correctL -= obj.offsetLeft; obj = obj.offsetParent}
}

3) Самую первую строку внутри скриптового блока (сразу после открывающего тега <script>) надо дополнить так, чтобы получилось:
var limitL, limitR, limitT, limitB, deltaX, deltaY, correctL = correctT = 0;

4) Внутри двух функций надо найти две одинаковые строки:
 var parusL = parusT = 0, obj = document.getElementById ('iPARUS');
, которые обе следует заменить на новые одинаковые:
var parusL = correctL, parusT = corrrectT, obj = document.getElementById ('iPARUS');

5) Ну и напоследок следует найти одну строку
limitL = limitT = 0, obj = document.getElementById ('iLIMIT');
, которую надо заменить на новую:
limitL = correctL; limitT = correctT; var obj = document.getElementById ('iLIMIT');


И всё будет работать как надо.

  Ответить  
 
 автор: vilk   (13.05.2010 в 11:51)   письмо автору
 
   для: АЯ   (13.05.2010 в 10:01)
 

Cпасибо. Заменил строки тут - http://freesoftspace.com/new/untitled1.php. Только к сожалению не работает. Движение картинки теперь не работает. Фаирфокс выводит такую ошибку - Ошибка:
corrrectT is not defined
Источник: http://freesoftspace.com/new/untitled1.php
Строка: 16

К сожалению мои познания в javascript пока слабенькие поєтому мне трудно понять как исправить

  Ответить  
 
 автор: АЯ   (13.05.2010 в 12:06)   письмо автору
 
   для: vilk   (13.05.2010 в 11:51)
 

Во-первых, Вы не исполнили пункт под номером 1.

Замените <div style="position:relative; height=500px;"> на <div id="iSHELL" style="position:relative; height=500px;">

Во-вторых, в новой строке
var parusL = correctL, parusT = corrrectT, obj = document.getElementById ('iPARUS');
я допустил описку - случайно УТРОИЛ букву r.
Надо correctT (с двумя r).
Исправьте. В двух местах.

В-третьих, у Вас почему-то вместо "точки с запятой" в другой новой строке прописалась запятая.
Исправьте на
limitL = correctL; limitT = correctT; var obj = document.getElementById ('iLIMIT');
                 ^
                 |
             Вот здесь


-----------------------
UPDATE: Кстати, только сейчас заметил - в самой первой функции (под названием funcCOORD) надо изменить строку на
var parusL = parusT = 0, obj = document.getElementById ('iPARUS'); eX -= correctL; eY -= correctT;
- иначе курсор типа MOVE не совпадает с областью картинки с парусником.

  Ответить  
 
 автор: vilk   (13.05.2010 в 16:41)   письмо автору
 
   для: АЯ   (13.05.2010 в 12:06)
 

Еще раз огромное спасибо. Вы мне очень помогли. На данный момент все работает

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования