豆瓣首頁話題輸入框的實現

  在做問答的時候,遇到一個需求,用戶的問題需要限制字數,不僅顯示計算的超出字數,還需在超出的內容上加一些提醒的效果,例如豆瓣首頁的話題輸入框,抽時間研究了下,需要考慮下面幾個問題:

1、輸入框的高度是固定的,如果超出高度需要滾動顯示(可上下鍵移動顯示)

2、隨時計算輸入的字數,并顯示在下方

3、根據計算結果將多出的部分加背景顯示(textarea里是不可以加背景的 :< )

4、根據3分析,需要加個hack實現(加個highlight的div),如果超出此div需要根據teatarea的scrollTop添加移動的距離

5、考慮輸入的各種內容及粘貼的情況

下面就一步一步來實現這種效果,先貼個圖看看效果:

html代碼如下:

<div id="container"><div class="text-wrap"><div class="highlight"></div></div><textarea autocomplete="false"></textarea><p class="count">140</p>
</div>

?

因為要考慮到textarea的文字與highlight的代碼完全重合,那么定義的樣式需要完全相同,且因輸入的文字有限制,所以考慮去掉輸入框的滾動條:

textarea::-webkit-scrollbar {display:none}

完整的css如下:

      #container {position: relative;}.text-wrap {height: 200px;width: 500px;padding: 5px 5px 5px 5px;overflow: hidden;position: absolute;top: 0;left: 0;z-index: 9;}textarea, .highlight {width: 500px;font-family: arial,sans-serif;font-size: 14px;}textarea {min-height: 200px;border: 1px solid #ccc;padding: 5px 5px 5px 5px;position: relative;background: none;resize: none;z-index: 10;}textarea::-webkit-scrollbar {display:none}.highlight {min-height: 200px;white-space: pre-wrap;word-wrap: break-word;color: transparent;}.highlight span {background: #fcc;}.error {color: red;}
View Code

?

除了html、css外,最最重要的就是js了,只有她才可以帶來神奇的效果,她是不可替代的唯一,她是實現你與機器之間的紐帶,有了她,不困了、不累了、不餓了,O(∩_∩)O~~

既然考慮到每次輸入的時候去查字數,那么就涉及到了事件,keyup和input,所以在textarea上添加這兩個事件,只有觸發這兩個事件時才執行下面的一系列操作。

查字:首先計算是否超出字數,這是常見的限定字數輸入框,各種微博、評論基本上都用到這個,定義兩個變量,考慮會粘貼或輸入代碼,所以替換了'<' 和 '>',len等于文字的長度,

如果len大于設定的最大值需要處理兩步:

1、顯示當前字數為醒目的紅色,提醒用戶超出字數限定范圍

2、給超出的字數加背景

text = $.trim($this.val().replace(/</g, '&gt;').replace(/>/g, '&lt;'))
len = text.length

全部js代碼如下,注釋非常清楚的說明了各部分的內容

        var MAX = 140,$text = $('textarea'),$highlight = $('div.highlight');$text.on('keyup input', function() {var $this = $(this),text = $.trim($this.val().replace(/</g, '&gt;').replace(/>/g, '&lt;')),len = text.length,count = Math.floor(MAX-len);if(count < 0) {$('p.count').addClass('error')}else{$('p.count').removeClass('error')}// 顯示當前字數$('p.count').text(count)// 將文字分成兩部分,超出的內容用span包起來,css加紅色背景樣式$highlight.html(text.slice(0, MAX) + '<span>' + text.slice(MAX) + '</span>')// 考慮粘貼時,內容超出,高亮部分需要重置位置
          resetMask()}).on('scroll', function() {// textarea滾動時,重置高亮部分的位置
          resetMask()})// 高亮內容位置隨文本框內容的位置重置function resetMask() {var textScrollTop = $text.scrollTop();if(textScrollTop > 0) {$highlight.css('margin-top', -textScrollTop);return}$highlight.css('margin-top', 0)}   
View Code

最終效果地址:https://codepen.io/mengyun/pen/eEbryJ

?

轉載于:https://www.cnblogs.com/mengyun/p/7459805.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/251947.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/251947.shtml
英文地址,請注明出處:http://en.pswp.cn/news/251947.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

pytorch 吸煙檢測yolov5s

YOLOV5s 吸煙目標檢測 參考學習 文章目錄 本原創項目長期更新&#xff0c;旨在完成校園異常行為實時精檢測&#xff0c;作到集成N次開發優化&#xff08;不止局限于調包&#xff09;為止&#xff0c;近期將不斷更新如下模型數據標注文件教程。關注博主&#xff0c;Star 一下g…

JQuery的ajax函數執行失敗,alert函數彈框一閃而過

先查看<form>標簽是否有action屬性&#xff0c;如果沒有&#xff0c;并且最后<button>標簽的type屬性為submit‘時&#xff0c;默認提交位置就是當前頁面 如果在頁面右鍵檢查&#xff0c;點擊網絡&#xff0c;會在開頭發現這樣的post包&#xff1a; 在右側消息頭處…

C#中Request.ServerVariables詳細說明及代理

Request.ServerVariables("Url") 返回服務器地址Request.ServerVariables("Path_Info") 客戶端提供的路徑信息Request.ServerVariables("Appl_Physical_Path") 與應用程序元數據庫路徑相應的物理路徑Request.ServerVariables("Path_Transla…

coco與voc相互轉化

把LabelImg標注的YOLO格式標簽轉化為VOC格式標簽 和 把VOC格式標簽轉化為YOLO格式標簽 點亮&#xff5e;黑夜 2020-07-07 11:08:24 3537 已收藏 90 分類專欄&#xff1a; 19—目標檢測 文章標簽&#xff1a; voc yolo 版權 把LabelImg標注的YOLO格式標簽轉化為VOC格式標簽 和…

angular中封裝fancyBox(圖片預覽)

首先在官網下載最新版的fancyBox(一定要去最新網站&#xff0c;以前依賴的jquery版本偏低)&#xff0c;附上鏈接&#xff1a;http://fancyapps.com/fancybox/3/ 然后在項目中引用jquery&#xff0c;然后在引用jquery.fancybox.min.css和jquery.fancybox.min.js。 如果需要動畫和…

十二省聯考題解 - JLOI2019 題解

十二省聯考題解 - JLOI2019 題解 兩個T3的難度較大 平均代碼量遠大于去年省選 套路題考查居多 A 難度等級 1 $n^2$暴力可以拿到$60$分的優秀成績 然后可以想到把區間異或轉化為前綴兩點異或 可以想到使用二分答案的方法可持久化Trie解決&#xff0c;但是時間復雜度為$n\log^2 (…

前端vue的get和post請求

vue的get和post需要兩個文件vue.js和vue-resource.js 以下是實現的代碼&#xff0c;可以參考一下&#xff0c;需要注意的接口的請求需要考慮跨域的問題&#xff0c;其次就是訪問頁面需要在tomcat下訪問&#xff0c;否則也會報跨域的問題 <!DOCTYPE html> <html lang&q…

[Vijos 1143]三取方格數

Description 設有N*N的方格圖&#xff0c;我們將其中的某些方格填入正整數&#xff0c; 而其他的方格中放入0。 某人從圖得左上角出發&#xff0c;可以向下走&#xff0c;也可以向右走&#xff0c;直到到達右下角。 在走過的路上&#xff0c;他取走了方格中的數。&#xff08;取…

線掃相機相關規格說明

工業線陣相機與面陣相機特點分析 點滴成海~ 2018-06-29 13:50:38 12184 收藏 29 分類專欄&#xff1a; intership 文章標簽&#xff1a; 視覺元件分析 版權 最近在公司實習&#xff0c;實習中的項目是使用的是微視的一款線陣相機&#xff08;Microview MVC1024DLM-GE35&…

postgresql 不同數據庫不同模式下的數據遷移

編寫不容易,轉載請注明出處謝謝, 數據遷移 因為之前爬蟲的時候&#xff0c;一部分數據并沒有上傳到服務器&#xff0c;在本地。本來用的就是postgresql&#xff0c;也沒用多久&#xff0c;數據遷移的時候&#xff0c;也遇到了很多問題&#xff0c;第一次使pg_dump xx > file…

Oracle中主鍵自增長

最近在學習Oracle和MySql&#xff0c;MySql有自動配置主鍵自增長auto_increment&#xff0c;這樣在輸入數據的時候可以不考慮主鍵的添加&#xff0c;方便對數據庫的操作。 在Oracle中設置自增長首先用到sequence序列&#xff1b; 以創建學生表為例&#xff1a; create table St…

3.單例模式

public class Singleton {//定義私有的靜態變量 private static Singleton singleton;//私有化構造函數private Singleton(){}//獲取實例public static Singleton getInstance(){//同步前判斷避免同步的性能損耗if(nullsingleton){//預防多線程問題synchronized(Singleton.clas…

docker與mmdetection

這里不再介紹 mmdetection 的安裝和配置&#xff0c;使用 mmdetection 較簡單的方法是使用已安裝 mmdetection 的 docker 容器。這樣直接省去了安裝 mmdetection 的過程&#xff0c;讓重心放在模型訓練上&#xff01; 如果你對 docker 和 mmdetection 還不是很熟悉&#xff0c…

互聯網平臺掘金三四五線城市,你需要知道的9.9個真相

互聯網上半場結束&#xff0c;一二線城市流量紅利消失&#xff0c;許多互聯網平臺、投資機構一度經歷至黑之夜。融資失敗、公司倒閉、大裁員迭出。對比鮮明的是&#xff0c;深耕三四五線城市的互聯網平臺正在迅猛崛起。春節期間&#xff0c;小部分敏銳的業者注意到互聯網產品在…

平滑重啟更新(GR機制)

平滑重啟更新&#xff08;GR機制&#xff09; 什么是平滑啟動機制 是一種在協議重啟時保證轉發業務不中斷的機制。什么時候用到平滑重啟 平滑重啟一般應用于業務更新或者版本發布過程中&#xff0c;能夠避免因為代碼發布重啟服務導致的暫時性服務不可用的影響。ngnix 平滑重啟和…

正斜杠( / )和反斜杠( \ )的區別

反斜杠“\”是電腦出現了之后為了表示程序設計里的特殊含義才發明的專用標點。所以除了程序設計領域外&#xff0c;任何地方都不應該使用反斜杠。 如何區分正反斜杠 英語&#xff1a;"/" 英文是forward slash, “\" 是backward slash形象些比喻的話&#xff0c;…

MMDetectionV2 + Colab

MMDetectionV2 Colab 超詳細教程及踩坑實錄 文章目錄 前言一、環境配置二、準備自己的數據集 Aug.14更新三&#xff1a;修改config文件 3.1 文件結構3.2 &#xff08;本地&#xff09;修改config文件 3.2.1 &#xff08;本地&#xff09;構造自己模型的權重文件3.2.2 &#x…

剛剛,OpenStack 第 19 個版本來了,附28項特性詳細解讀!

剛剛&#xff0c;OpenStack 第 19 個版本來了&#xff0c;附28項特性詳細解讀&#xff01; OpenStack Stein版本引入了新的多云編排功能&#xff0c;以及幫助實現邊緣計算用例的增強功能。 OpenStack由一系列相互關聯的項目組成&#xff0c;這些項目可以以不同的組合方式組合在…

SQL作業:綜合練習(二)的返評

一&#xff1a;作業題目&#xff1a;綜合練習&#xff08;二&#xff09; 二&#xff1a;題目要求&#xff1a; 1、創建數據庫CPXS&#xff0c;保存于E盤根目錄下以自己學號姓第一個字母&#xff08;阿拉伯數字大寫字母&#xff09;方式創建的文件夾中&#xff0c;初始大小5MB&…

caffe cifar10試跑問題總結

caffe cifar10試跑問題總結 [daniel] 寫了一個腳本可以直接用來添加環境變量&#xff1a;/Users/songdanzju/daniel_script/export_for_ananconda.sh#! /bin/bash export PATH~/ananconda/bin:$PATH export DYLD_FALLBACK_LIBRARY_PATH~/anaconda:~/anaconda/lib:/usr/local/l…