小编典典

调整textarea的大小?

javascript

当前版本的Firefox和Chrome包含一个拖动处理程序以调整<textarea>框的大小。我需要捕获调整大小的事件,我认为使用jQuery的resize()事件会很容易,但是它不起作用!

有没有办法捕获它?


阅读 1269

收藏
2020-05-01

共1个答案

小编典典

Chrome不会捕获resize事件,Chrome不会捕获mousedown,因此您需要设置init状态,然后通过mouseup处理更改:

jQuery(document).ready(function(){
   var $textareas = jQuery('textarea');

   // store init (default) state   
   $textareas.data('x', $textareas.outerWidth());
   $textareas.data('y', $textareas.outerHeight()); 

   $textareas.mouseup(function(){

      var $this = jQuery(this);

      if (  $this.outerWidth()  != $this.data('x') 
         || $this.outerHeight() != $this.data('y') )
      {
          // Resize Action Here
          alert( $this.outerWidth()  + ' - ' + $this.data('x') + '\n' 
               + $this.outerHeight() + ' - ' + $this.data('y')
               );
      }

      // store new height/width
      $this.data('x', $this.outerWidth());
      $this.data('y', $this.outerHeight()); 
   });

});

HTML

<textarea></textarea>
<textarea></textarea>

注意:

您可以像侯赛因所做的那样附加自己可调整大小的内容,但是如果您想要原始的可调整大小的内容,则可以使用上面的代码
正如布莱恩·唐宁(Bryan Downing)所提到的那样,当您将鼠标悬停在文本区域上方时,将鼠标悬停在上面时,此方法有效。但是,在某些情况下可能不会发生这种情况,例如当浏览器未最大化并且您继续拖动到浏览器范围之外或用于resize:vertical锁定移动时。

对于更高级的功能,您需要添加其他侦听器,可能需要添加队列和间隔扫描程序。还是使用mousemove,就像我相信jQuery可调整大小一样-问题就变成了您对性能和性能有何评价?

更新:此后对浏览器的UI进行了更改。现在,双击角落可以将文本框收缩为其默认大小。因此,您还可能需要在此事件之前/之后捕获更改。

2020-05-01