Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Изменение ширины div растягиванием мышкой


Автор: shine 19.11.2006, 16:38
Можно ли как-то сделать растягивание div-а мышкой? По аналогии с тем как мы меняем размеры окна: за край схватил и потянул куда тебе нужно.

Спасибо.

Автор: AKS 19.11.2006, 17:59
shine, вот "нарисовал" маленький пример:
Код

function hook(e) {
  var el = e.srcElement || e.target;
  el.startX = (e.type == 'mousedown') ? 
    (e.clientX - el.offsetWidth) : 0;
}
function move(e) {
  var el = e.srcElement || e.target;
  if(el.startX) 
    el.style.width = e.clientX - el.startX + 'px';
  (e.preventDefault) ? e.preventDefault() : e.returnValue = false;
}
if(!document.attachEvent) {
  document.attachEvent = function(e, f) {
    this.addEventListener(e.substr(2), f, false);
  }
} 
document.attachEvent('onmouseup', hook);
document.attachEvent('onmousemove', move);

Код

<div style='width:100px;height:100px;background-color:black;position:relative;' 
  onmousedown='hook(event)' onmouseout='hook(event)'></div>

Автор: shine 19.11.2006, 18:41
AKS, спасибо.
Вот такой получился вариант работающий в IE6, FF и Opera:

Код

function hook(e) 
{
    var el;
    if(e.srcElement) el = e.srcElement;
    else el = e.target;

    el.startX = (e.type == 'mousedown') ? (e.clientX - el.offsetWidth) : 0;
}
    
function move(e) 
{
    var el;
    if(e.srcElement) el = e.srcElement;
    else el = e.target;
    
    if(el.startX) el.style.width = e.clientX - el.startX + 'px';
    
    e.returnValue = false;
} 

if (document.addEventListener)
{
    document.addEventListener('mouseup', hook, false); 
    document.addEventListener('mousemove', move, false); 
}
else if (document.attachEvent)
{
    document.attachEvent('onmouseup', hook);
    document.attachEvent('onmousemove', move);        
}

Автор: 12345c 19.11.2006, 22:42
Растягивание таблиц: http://js2.ru/example/zzzz49.htm

Автор: Elfet 31.1.2007, 10:38
AKS, а можно пояснить пример? Я не очень понимаю как он работает. Хочу сделать растягивание, только определённых элементов на странице, а не всех.  smile 

Автор: pythonwin 2.2.2007, 07:48
Elfet, измени вот эту часть:

Код

<script>d=document;g=function(a){return d.getElementById(a);}
var FF=d.all==null; /*isGecko*/
    var mDown=0;    //установки скрипта
    var posX;    //переменные скрипта
onload=function(){tdTab=[];tdTab[1]=g('tdTb1');tdTab[2]=g('tdTb2');tdTab[3]=g('tdTb3');
  if(IE=d.all&&!self.opera)g('divTdPt1').style.display='none';
  widPt3=IE?0:g('ptPt3').offsetWidth+2;
}

d.onmousedown=function(e){var t;
    if((t=FF?e.target:event.srcElement).className!="tdResize")return;    //отсечка лишнего
    mDown=t.id.charAt(8);
    posX=(FF?e.pageX:event.x+d.body.scrollLeft)-tdTab[mDown].offsetWidth;    //начальная точка захвата
    posTbl=(FF?e.pageX:event.x+d.body.scrollLeft)-g('tdResize'+mDown).offsetParent.offsetWidth;
}
d.onmousemove=function eMove(e){if(!mDown)return;
    tdTab[mDown].style.width=
      xx=Math.max(0,(FF?e.pageX:event.x+d.body.scrollLeft)-posX);
      g('tdResize'+mDown).style.width=IE?4:1;
      isPt3=(g('divTdSp'+mDown).offsetWidth>g('divTdTb'+mDown).offsetWidth)?widPt3:0;
      g('divTdPt'+mDown).style.display=IE||!isPt3?'none':'table';
      g('d2').innerHTML
        =g('divTdSp'+mDown).offsetWidth+' '
        +g('divTdTb'+mDown).offsetWidth+' '
        +isPt3
      g('divTdTb'+mDown).style.width=xx-isPt3;
      g('tdResize'+mDown).offsetParent.style.width=(Math.max(0,(FF?e.pageX:event.x+d.body.scrollLeft)-posTbl))+6;
    
}
d.onmouseup=function(e){mDown=0;}
d.ondragstart=d.onselectstart=function(){if(event.srcElement.className=="tdResize")event.returnValue=!1;}
</script>


только сделай чтобы 
d не был равен document, а тому объекту, размер, которого ты хочешь менять smile

Автор: Elfet 2.2.2007, 09:24
Ок! Спасибо!  smile 

Автор: Avb 5.2.2007, 15:09
Вот еще:
http://www.jackslocum.com/blog/2006/11/24/resizable-reloaded/

Автор: feosr 18.4.2007, 07:22
Мне понравилась реализация скрипта, но можноли уменьшить объем скрипта? Для работы ему нужны 3 скрипта, сумарный вес которых почти пол метра((

Автор: arbimbmet 31.8.2022, 22:51
Модератор: Сообщение скрыто.

Автор: Objegog 7.9.2022, 03:09
Модератор: Сообщение скрыто.

Автор: hipAppops 10.9.2022, 01:05
Модератор: Сообщение скрыто.

Автор: anceria 13.9.2022, 02:59
Модератор: Сообщение скрыто.

Автор: pelpigh 17.9.2022, 07:18
Модератор: Сообщение скрыто.

Автор: zesurne 7.10.2022, 04:29
Модератор: Сообщение скрыто.

Автор: Agristisy 12.10.2022, 19:25
Модератор: Сообщение скрыто.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)