← на главную
Нашли ошибку? Сообщите, пожалуйста, о ней. Выделите ошибку и нажмите ctrl+enter.

Дневник — зеркало души

   читать: всё сразу по категориям поиск

   подписаться на рассылку: рассылка по email Twitter

9 июля 2009 в 01:31
Растягивание textarea
Вот наконец-то руки дошли до скрипта, которым пользуюсь давно. Его изначально написал Леонид Шевцов.
   Но он сделал только растягивание по вертикали. Меня это немного не устраивало и я решил модернизировать скрипт так, что бы текстовое поле можно было растягивать по высоте и ширине одновременно.
   
   Вот как оно выглядит теперь:
   
   
   Разметка:
   Что бы использовать данный скирпт нужно вставить в код страницы textarea и картинку, за которую пользователь и будет "тянуть". Ниже приведу код и таблицу стилей, которые я использовал.

<style>
.
ta_text{
  
width320px;
  
height:100px;
  
overflowauto;
  
//Убираем все отступы что бы сделать максимально кроссбраузерно
  
margin:0
  
padding:0;
}
.
resizer{
  
//Двигаем картинку на нужное место
  
positionrelative;
  
top:5px;
  
right17px;
  
cursorse-resize;
}
style>
//Следующие две строчки надо вставить в код страницы в нужное место
   
<textarea name="text" class="ta_text" id="text">textarea>
   <
img src="../images/resizer.gif" class="resizer" onMouseDown="textareaResizer(event, 'text');">
?>


   
   Собственно сам скрипт:

var minH=50;// Минимальная высота поля
var minW=320;// Минимальная ширина поля
var startH=0;
var 
startW=0;
var 
startY=0;
var 
startX=0;
var 
textarea=null;
var 
oldMouseMove=null;
var 
oldMouseUp=null;

function 
textareaResizer(eid){
    if (
== null) { window.event }
    if (
e.preventDefault
    {
        
e.preventDefault();
    } 
    
textarea document.getElementById(id);
    
startY=e.clientY;
    
startX=e.clientX;
    
startH=textarea.offsetHeight;
    
startW=textarea.offsetWidth;
    
document.onmousemove=textareaResizer_moveHandler;
    
document.onmouseup=textareaResizer_cleanup;
    return 
false;
}
function 
textareaResizer_moveHandler(e){
  if (
== null) { window.event 
  if (
e.button<=1)
  {
     
curH=(startH+(e.clientY-startY));
     
curW=(startW+(e.clientX-startX));
     
     if (
curH<minHcurH=minH;
     if (
curW<minWcurW=minW;
     
     
textarea.style.width=curW+'px';
     
textarea.style.height=curH+'px';
     return 
false;
  }
}
function 
textareaResizer_cleanup(e) {
  
document.onmousemove=oldMouseMove;
  
document.onmouseup=oldMouseUp;
}
?>


   Уверен, что данный скрипт поможет многим.
   
   Рабочий вариант можно скачать себе: textarea resizer.

знания, сайт   |   10 комментариев    |   следить за комментариями
|
|
← Выберите дарПарадокс →
 
Комментарии:
Гость( 9 июля 2009 в 12:49 )

   Правда, твой скипт в FF3.5 не работает.
   
   -- leonid.shevtsov.me

Тася Feel( 10 июля 2009 в 00:16 )

   М А Л А Д Е Ц ! ! ! :))))))))
   (говорю- ка Профессионал в данном вопросе) ;)))

Гость( 10 июля 2009 в 12:32 )

   Теперь скрипт позволяет легко сделать текстарею шире экрана, да еще и маркер при этом уплывает.
   
   А еще конкретно у этого поста конкретно эта текстарея для ввода комментария не тянется, а тянется верхняя.
   
   Внимательнее надо быть... Особенно если делать что-то для публики.
   
   -- leonid.shevtsov.me

автор ответил:

   и в самом деле. Спасибо что сказал. Надо бы поставить ограничение по ширине, в зависимости от ширины экрана.
   А по поводу того, что нижняя textarea ек растягивается. Я думаю, что это потому, что тх две на страницы, а скрипт только один. А в нём используются глобальные переменные, которые получаются общие для обоих textarea. Может стоит переделать что бы небыло глобальных переменных?

Гость( 10 июля 2009 в 13:54 )

   http://coldflame.in.ua/resizer.html — у меня все и с глобальными замечательно работает.
   
   -- leonid.shevtsov.me

DmbITpo( 10 июля 2009 в 20:12 )

   хм..значит проблема не в глобальных переменных. Буду думать.

Гость( 12 июля 2009 в 14:52 )

   Дмытро, нельзя настолько сырой продукт выкладывать.
   Как тут уже упомянули, маркер уплывает, если тянуть за пределы экрана. На Опере 9.63 он упрыгивает начиная с 90% ширины или около того.
   Проблема двух textarea'й в том, что ты им дал одинаковые имена. Это вообще верх непрофессионализма.
   Работай :)

DmbITpo( 27 декабря 2009 в 20:57 )

   Подправил текст и теперь всё будет работать верно, даже если на странице несколько textarea.
   Просто каждой из них будет добавить свой персональный id и не забыть его передать в функцию.

Гость( 20 октября 2010 в 11:09 )

   здорово, у меня работает

автор ответил:

   Это здорово!

 
Добавить комментарий:

Вы можете войти под своим именем или просто написать комментарий от имени Гость.

Сколько будет если к двадцати пяти прибавить корень из ста?

следить за комментариями к этой записи