Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #21 (permalink)  
Старый 19.05.2012, 21:06
Новичок на форуме
Отправить личное сообщение для orme Посмотреть профиль Найти все сообщения от orme
 
Регистрация: 13.05.2012
Сообщений: 7

Если не хотите вникать в DOM, используйте фреймворки (MooTools, JQuery). Там это давно и хорошо реализовано и с лимитами и с контейнерами и хендлами.
http://mootools.net/docs/more/Drag/Drag
http://docs.jquery.com/UI/Draggable
Ответить с цитированием
  #22 (permalink)  
Старый 21.11.2012, 16:52
Новичок на форуме
Отправить личное сообщение для JS-Talker Посмотреть профиль Найти все сообщения от JS-Talker
 
Регистрация: 21.11.2012
Сообщений: 1

А как можно сделать такое - есть див (логин-форма), на этом диве еще лежат дочерние див-шапка, див-контент и див-подвал.

Как сделать чтобы форма таскалась мышью только за див-шапку?

Сейчас форма таскается за любое место, т.к. onmousedown указан у первого, родительского дива.
Ответить с цитированием
  #23 (permalink)  
Старый 21.11.2012, 18:17
Интересующийся
Отправить личное сообщение для Фархад Рахимжанов Посмотреть профиль Найти все сообщения от Фархад Рахимжанов
 
Регистрация: 20.11.2012
Сообщений: 11

По-моему Илья Кантор достаточно развернуто описал о drag'n'drop: http://javascript.ru/ui/draganddrop
Ответить с цитированием
  #24 (permalink)  
Старый 04.09.2013, 03:30
Новичок на форуме
Отправить личное сообщение для arbitsv Посмотреть профиль Найти все сообщения от arbitsv
 
Регистрация: 01.07.2011
Сообщений: 1

Вот готовый рабочий пример.
Паботает во всех броузерах
Взят из Source Code Library:

<!--
Add dragging to your div elements. just adding class=”drag” to
the div element will make it draggable.

You can set the area in which the div(s) can be dragged
using setdragBounds function
-->


<!doctype html public "-//W3C//DTD HTML 3.2 Final//EN">
<html>
<head>
<style>
.Text{
font-family: Verdana,Arial,Sans-serif,'Times New Roman';
font-size: 9pt;
font-weight: normal;
font-style: normal;
color: #666;
text-decoration: none;
}

.alertsBoxTitle{
font-family: Verdana,Arial,Sans-serif,'Times New Roman';
font-size: 9pt;
font-weight: bold;
font-style: normal;
color: #ffffff;
text-decoration: none;
}
.alertsBox{
background: #ECF1F9;
border: 1px #a1bcdf solid;
}
body{
overflow:hidden;
}
</style>

<script language="javascript">
// browser detection
var agt=navigator.userAgent.toLowerCase();
var is_major = parseInt(navigator.appVersion);
var is_minor = parseFloat(navigator.appVersion);

var is_nav = ((agt.indexOf('mozilla')!=-1) && (agt.indexOf('spoofer')==-1)
&& (agt.indexOf('compatible') == -1) && (agt.indexOf('opera')==-1)
&& (agt.indexOf('webtv')==-1) && (agt.indexOf('hotjava')==-1));
var is_nav4 = (is_nav && (is_major == 4));
var is_nav6 = (is_nav && (is_major == 5));
var is_nav6up = (is_nav && (is_major >= 5));
var is_ie = ((agt.indexOf("msie") != -1) && (agt.indexOf("opera") == -1));

var dragapproved=false
var z,x,y
var maxleft,maxtop,maxright,maxbottom;

function setdragBounds()
{
// you can set the bounds of the draggable area here
maxleft = 10;
maxtop = 10;
maxright = document.body.clientWidth - 10;
maxbottom = document.body.clientHeight - 100;
}

function move(e)
{
var tmpXpos = (!is_ie)? temp1+e.clientX-x: temp1+event.clientX-x;
var tmpYpos = (!is_ie)? temp2+e.clientY-y : temp2+event.clientY-y;
if (dragapproved)
{
z.style.left = tmpXpos;
z.style.top = tmpYpos;

if (tmpXpos < maxleft)
z.style.left = maxleft;

if (tmpXpos > maxright)
z.style.left = maxright;

if (tmpYpos < maxtop)
z.style.top = maxtop;
if (tmpYpos > maxbottom)
z.style.top = maxbottom;

return false
}
}

function drags(e)
{
if (!(is_ie)&&!(!is_ie)) return

var firedobj=(!is_ie)? e.target : event.srcElement
var topelement=(!is_ie)? "HTML" : "BODY"

while (firedobj.tagName!=topelement && firedobj.className!="drag" && firedobj.tagName!='SELECT' && firedobj.tagName!='TEXTAREA' && firedobj.tagName!='INPUT' && firedobj.tagName!='IMG')
{
// here you can add the elements that cannot be used for drag . using their class name or id or tag names
firedobj=(!is_ie)? firedobj.parentNode : firedobj.parentElement
}

if (firedobj.className=="drag")
{
dragapproved = true
z = firedobj
var tmpheight = z.style.height.split("px")
maxbottom = (tmpheight[0])?document.body.clientHeight - tmpheight[0]:document.body.clientHeight - 20;

temp1 = parseInt(z.style.left+0)
temp2 = parseInt(z.style.top+0)
x = (!is_ie)? e.clientX: event.clientX
y = (!is_ie)? e.clientY: event.clientY
document.onmousemove = move

return false
}
}

document.onmousedown=drags
document.onmouseup=new Function("dragapproved=false")
</script>
</head>

<body>
<div id="Dialog" style="width:316px;height:119px;max-width:316px;position:absolute;top:50px;left:140px; z-index:1000;" class="drag">
<table width="100%" style="width:315px;height:119px" cellspacing="0" cellpadding="0" class="alertsBox" id="dialog_table">
<tr style="cursor:move">
<td class="alertsBoxTitle notselectable" colspan="2" align="left" height="21" style="cursor:move;background-color:#32426F">Drag Me</td>
</tr>
<tr>
<td align="center" colspan="2" height="5"> </td>
</tr>
<tr>
<td align="center" colspan="2">
<table width="97%" border="0" cellspacing="0" cellpadding="0" align="center">
<tr>
<td valign='top' align="center">
</td>
</tr>
<tr>
<td valign='top' colspan="2" class="Text">You can place text here</td>
</tr>
<tr>
<td valign='top' colspan="2" align="center"><br/><input type="button" value="Ok"/></td>
</tr>
</table></td>
</tr>
</table>
</div>
</body>
</html>
Ответить с цитированием
  #25 (permalink)  
Старый 24.10.2017, 09:54
Новичок на форуме
Отправить личное сообщение для welleant Посмотреть профиль Найти все сообщения от welleant
 
Регистрация: 24.10.2017
Сообщений: 1

Использую код который дали на первой странице:
Цитата:
function $(v) { return(document.getElementById(v)); }
02
function agent(v) { return(Math.max(navigator.userAgent.toLowerCase(). indexOf(v),0)); }
03
function xy(e,v) { return(v?(agent('msie')?event.clientY+document.bod y.scrollTop:e.pageY)agent('msie')?event.clientX+ document.body.scrollTop:e.pageX)); }
04

05
function dragOBJ(d,e) {
06

07
function drag(e) { if(!stop) { d.style.top=(tX=xy(e,1)+oY-eY+'px'); d.style.left=(tY=xy(e)+oX-eX+'px'); } }
08

09
var oX=parseInt(d.style.left),oY=parseInt(d.style.top) ,eX=xy(e),eY=xy(e,1),tX,tY,stop;
10

11
document.onmousemove=drag; document.onmouseup=function(){ stop=1; document.onmousemove=''; document.onmouseup=''; };
12

13
}

<div style="position: relative; top: 0; left: 0" onmousedown="dragOBJ(this,event); return false;">test</div>

Все работает хорошо. но только на ПК, на мобильных устройствах, андройд и ios вообще никак не реагирует, может кто знает можно ли это легко исправить?
Ответить с цитированием
  #26 (permalink)  
Старый 24.10.2017, 11:03
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

welleant,

Почитайте про события на мобильных устройствах
(https://yandex.gik-team.com/?q=js+э...ойствах)
Ответить с цитированием
  #27 (permalink)  
Старый 18.03.2024, 12:37
Новичок на форуме
Отправить личное сообщение для roma346764fdg Посмотреть профиль Найти все сообщения от roma346764fdg
 
Регистрация: 18.03.2024
Сообщений: 1

Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
При клике ссылки, открыть DIV блок, и при клике ещё раз, закрыть его Simon Общие вопросы Javascript 59 28.05.2017 17:31
HTML-кнопка как двойной щелчок мышкой Ыукпуй Общие вопросы Javascript 5 20.11.2008 16:18