校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > HTML5 textarea高度自適應的兩種方案

HTML5 textarea高度自適應的兩種方案

熱門標簽:如何查看地圖標注 電話機器人技術 地圖標注軟件打印出來 智能電銷機器人被禁用了么 高德地圖標注商戶怎么標 欣鼎電銷機器人 效果 黃石ai電銷機器人呼叫中心 ok電銷機器人 惡搞電話機器人

閱讀全文你將獲得以下解決方案。

  • 點擊長文本編輯textarea,自動獲得焦點
  • 隨著輸入值自動伸縮高度
  • 可復制添加信息
  • 可粘貼文本
  • 可粘貼圖片

以下實例代碼執行環境為Chrome80

方案一

HTML5 Textarea 元素

1. 自動獲得焦點

點擊編輯自動獲得焦點后光標跳轉到了最前面,why?

查文檔 MDN,textarea元素存在selectionEndselectionStart的屬性用來表示選中的文本開始位置和結束位置,DOM接口實例是 HTMLTextAreaElement, 它具有 setSelectionRange 方法,用來選中輸入框中的文本,用法:TextAreaElement.setSelectionRange(selectionStart, selectionEnd, [optional] selectionDirection);

那么我們只要做到selectionStart === selectionEnd === value.length , 這樣光標就選中到最末尾。

edit.addEventListener("click", function() {
  txt.classList.add("hidden");
  document.body.insertBefore(textarea, edit);
  textarea.innerHTML = "這是需要編輯的信息";
  textarea.focus();
  // textarea.selectionEnd = textarea.innerHTML.length;

  textarea.setSelectionRange(
    textarea.innerHTML.length,
    textarea.innerHTML.length
  );
});

2. 自適應高度

當不設置高度時換行會出現滾動條,所以只要讓textarea滾動條消失,讓其height = scrollHieght, 那么如何監聽textarea的變化,則需要input事件,讓textarea高度動態等于它的scrollHeight即可,代碼如下:

textarea.addEventListener("input", function() {
    this.style.height = `${this.scrollHeight}px`;
});

為什么每次輸入都會使得高度增加(每次增加4px),經過測試Safari同樣也是這個效果,Firefox符合預期高度不異常增加,查看Chrome控制臺發現textarea內置了很多樣式,嘗試將去掉padding后,可以正常隨著內容增加高度自適應了。

<style>
textarea {
  padding: 0;
}
</style>
<textarea></textarea>
<script>
const textarea = document.createElement("textarea");
textarea.addEventListener("input", function(e) {
  this.style.height = `${this.scrollHeight}px`;
});
</script>

為什么去掉padding值,輸入后高度就不增加了?(未找到合理的解釋,歡迎留言討論解答)

但是刪除文本的情況下height并未能自動縮放,分析原因, 當刪除文本換行的時候scrollHeight的大小并未發生改變,scrollHeight作為只讀屬性( MDN-文檔),如何讓scrollHeight高度重新計算哪?只有改變高度,于是:

textarea.addEventListener("input", function(e) {
  this.style.height = "inherit";
  this.style.height = `${this.scrollHeight}px`;
});

到此高度自適應輸入內容完成,但是每次換行的閃動很難受,transition走一波,

textarea {
  overflow: hidden;  // 防止換行出現滾動條閃動
  padding: 5px 10px;
  box-sizing: border-box;
  transition: all 0.2s linear;
}

結果transition并沒效果,原因height初始值或者參考值必須為數值過渡動畫才會生效,height設置為auto或者inherit動畫不會生效, 所以折中的辦法就是當刪除的時候重新重置高度,輸入時不需要重置,這樣輸入時動畫生效, 刪除沒有動畫, 暫時沒想到更好的辦法。

textarea.addEventListener("keyup", function(e) {
  if (e.keyCode === 8) {
    this.style.height = "inherit";
    this.style.height = `${this.scrollHeight}px`;
  } else {
    this.style.height = `${this.scrollHeight}px`;
  }
});

3. 支持粘貼文本,圖片等

textarea只能輸入文本,無法實現粘貼圖片。

textarea.addEventListener(
  "paste",
  function(e) {
    e.preventDefault();
    console.log(
      "paste",
      e.clipboardData.items,
      e.clipboardData.types,
      e.clipboardData.getData("text/html"),
      e.clipboardData.getData("text/plain"),
      e.clipboardData.getData("text/Files")
    );
  },
  false
);

方案二

div contenteditable 替換textarea

1. 自動獲得焦點

編輯div contenteditabletrue,然后利用RangeSelection 光標移動到最后的效果。

edit.addEventListener("click", () => {
  textarea.setAttribute("contenteditable", true);
  textarea.focus();
  const range = document.createRange();

  // range 包含的內容
  range.selectNodeContents(textarea);

  // range.setStart(textarea.firstChild, 0);
  // range.setStart(textarea.lastChild, textarea.innerHTML.length);

  // 起始位置是否相同
  range.collapse(false);
  const sel = window.getSelection();
  
  // 將所有的區域都從選區中移除。
  sel.removeAllRanges();
  
  // 一個區域(Range)對象將被加入選區。
  sel.addRange(range);
});

2. 自適應高度

div contenteditable 天然支持根據輸入來自適應高度。

3. 粘貼圖片, 文本等

textarea.addEventListener("paste", function(e) {
  e.preventDefault();
  const clipboardData = e.clipboardData || e.originalEvent.clipboardData;
  // 獲取純文本
  let text = clipboardData.getData("text/plain");
  let file = clipboardData.getData("text/plain");
  // console.log(clipboardData.items, clipboardData.getData("text/Files"));

  // 插入img,可以做一些上傳圖片的一些操作
  insertImg(clipboardData);

  // 只輸入純文本
  document.execCommand("insertText", false, text);
});

此方法可以限定只能上傳文本或者圖片。

歡迎留言討論其他textarea高度自適應的方案。

到此這篇關于HTML5  textarea高度自適應的兩種方案的文章就介紹到這了,更多相關textarea高度自適應內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章,希望大家以后多多支持腳本之家!

標簽:盤錦 赤峰 阿壩 萍鄉 金昌 中山 綏化 聊城

巨人網絡通訊聲明:本文標題《HTML5 textarea高度自適應的兩種方案》,本文關鍵詞  HTML5,textarea,高度,自,適應,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《HTML5 textarea高度自適應的兩種方案》相關的同類信息!
  • 本頁收集關于HTML5 textarea高度自適應的兩種方案的相關信息資訊供網民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    99视频国产精品| 91啪在线观看| 日韩电影在线观看一区| 一本色道亚洲精品aⅴ| 久久久久久一二三区| 亚洲国产精品t66y| 99久久国产综合精品女不卡| 中文字幕第一区二区| 欧美色电影在线| 国产一二三精品| 亚洲嫩草精品久久| 欧美高清性hdvideosex| 男女男精品视频网| 国产精品盗摄一区二区三区| 欧美日韩国产片| 91网站在线播放| 精品一区二区免费看| 中文字幕电影一区| 日韩欧美三级在线| 在线观看视频91| 国产精品123区| 日韩激情一二三区| 日韩精品亚洲专区| 中文字幕中文在线不卡住| 日韩三级高清在线| 在线观看av一区二区| 欧美制服丝袜第一页| 丁香激情综合五月| 国产69精品久久99不卡| 国产一区二区三区久久悠悠色av| 首页亚洲欧美制服丝腿| 日韩av在线播放中文字幕| 爽好多水快深点欧美视频| 亚洲成人免费视频| 天堂久久一区二区三区| 久久精品免费观看| 丁香亚洲综合激情啪啪综合| 99re视频精品| 91精品国产乱| 国产精品嫩草影院av蜜臀| 国产精品麻豆久久久| 亚洲日本护士毛茸茸| 亚洲天堂成人网| 亚洲成人av中文| 国产精品69久久久久水密桃| eeuss鲁一区二区三区| 欧美人妖巨大在线| 中文字幕av免费专区久久| 亚洲最新在线观看| 国产精品一级在线| 欧美日韩一区精品| 国产精品视频你懂的| 丝袜美腿成人在线| 色综合 综合色| 欧美国产日韩亚洲一区| 美日韩黄色大片| 在线精品视频一区二区| 国产精品美女久久久久高潮| 免费观看久久久4p| 在线亚洲欧美专区二区| 国产色婷婷亚洲99精品小说| 亚洲午夜影视影院在线观看| 日日夜夜免费精品| 91久久精品一区二区三区| 欧美一区二区三区免费大片| 亚洲欧美日韩中文播放 | 884aa四虎影成人精品一区| 欧美激情在线看| 麻豆精品视频在线观看视频| 欧美日韩欧美一区二区| 午夜天堂影视香蕉久久| av在线播放一区二区三区| 亚洲国产精品99久久久久久久久| 国产麻豆成人精品| 亚洲日韩欧美一区二区在线| 成人免费va视频| 亚洲欧洲色图综合| 欧美日韩一区三区四区| 亚洲国产精品久久久久秋霞影院 | 国产99久久久精品| 亚洲三级电影网站| 91色在线porny| 三级一区在线视频先锋| 欧美日韩一二三区| 视频一区二区三区入口| 久久网这里都是精品| 国产九色sp调教91| 亚洲天堂中文字幕| 日韩一区和二区| 国产自产视频一区二区三区 | 成人免费看视频| 久久99久久久欧美国产| 一区二区三区精品久久久| 欧美一区二区在线免费播放| 成人av免费观看| 成人永久免费视频| 久久成人免费电影| 天堂精品中文字幕在线| 亚洲丝袜自拍清纯另类| 久久久精品中文字幕麻豆发布| 一本色道久久综合亚洲91| 不卡影院免费观看| 99久久久国产精品免费蜜臀| 国产成人精品www牛牛影视| 老鸭窝一区二区久久精品| 亚洲国产日产av| 亚洲高清视频的网址| 亚洲午夜一区二区| 婷婷综合五月天| 国产精品丝袜91| 亚洲视频免费在线| 一区二区三区视频在线看| 亚洲欧美电影一区二区| 亚洲综合久久av| 一区二区三区 在线观看视频| 国产精品亲子伦对白| 亚洲裸体在线观看| 爽好多水快深点欧美视频| 国产一区三区三区| 日本道在线观看一区二区| 欧美剧情电影在线观看完整版免费励志电影| 91蝌蚪国产九色| 精品国产精品网麻豆系列| 亚洲女人小视频在线观看| 日韩国产精品久久久久久亚洲| 久久国产福利国产秒拍| 91碰在线视频| 精品国产99国产精品| 亚洲欧美偷拍另类a∨色屁股| 久久99久久99| 欧美日韩国产精选| 国产精品对白交换视频| 开心九九激情九九欧美日韩精美视频电影| 久久成人免费网站| 欧美无乱码久久久免费午夜一区 | 亚洲精品自拍动漫在线| 日本中文一区二区三区| 一本到一区二区三区| 久久―日本道色综合久久| 午夜激情久久久| 欧美午夜精品一区二区蜜桃| 日本一区二区免费在线| 奇米影视一区二区三区| 日韩欧美一区二区在线视频| 夜夜操天天操亚洲| 91精品综合久久久久久| 亚洲在线中文字幕| 色视频一区二区| 午夜在线电影亚洲一区| 欧美精品18+| 久久99热这里只有精品| 久久久综合激的五月天| va亚洲va日韩不卡在线观看| 欧美国产禁国产网站cc| 色综合久久综合网97色综合| 亚洲人成网站在线| 精品视频全国免费看| 另类小说色综合网站| 国产精品久久久久久久久搜平片| av资源网一区| 开心九九激情九九欧美日韩精美视频电影| 欧洲视频一区二区| 国产精品一区二区男女羞羞无遮挡| 国产婷婷色一区二区三区在线| 色哟哟国产精品| 国产一区视频网站| 日韩国产欧美视频| 国产精品不卡在线观看| 欧美一级搡bbbb搡bbbb| 97久久超碰精品国产| 国产乱人伦偷精品视频不卡 | 男人的j进女人的j一区| 中文文精品字幕一区二区| 69成人精品免费视频| 色婷婷综合视频在线观看| 国产高清精品网站| 亚洲成a人v欧美综合天堂下载| 久久久青草青青国产亚洲免观| 欧美自拍丝袜亚洲| 一本久道中文字幕精品亚洲嫩| 狠狠色2019综合网| 国产在线不卡一区| 天天免费综合色| 亚洲电影你懂得| 日本欧美加勒比视频| 日韩激情中文字幕| 久久精品国产免费| 久久国产精品色| 韩国一区二区三区| 国产.欧美.日韩| 国产成人免费视| 粉嫩高潮美女一区二区三区| 国产精品一品视频| 91一区二区在线观看| 欧美视频一区二区三区| 555夜色666亚洲国产免| 久久综合视频网| 亚洲精品中文在线| 日产精品久久久久久久性色| 久久99国产精品尤物|