首页 > 其他分享 >对原生textarea加上:当前输入字数/最大输入字数

对原生textarea加上:当前输入字数/最大输入字数

时间:2024-06-30 17:27:00浏览次数:22  
标签:const textarea textArea charCount minWidth width 字数 event 输入

源码:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Textarea Character Counter with Draggable Resizing</title>
<style>
  .container {
    position: relative;
    width: 100%;
    max-width: 280px; /* Adjust as needed */
  }
  #inputText {
    width: 100%;
    min-width: 280px; /* Minimum width to prevent shrinking */
    height: 100px; /* Adjust initial height as needed */
    min-height: 100px; /* Minimum height to prevent shrinking */
    box-sizing: border-box;
    padding: 10px;
    font-size: 14px; /* Adjust font size as needed */
    overflow: auto; /* Handle text overflow */
  }
  .counter {
    position: absolute;
    bottom: 10px;
    right: 10px;
    color: black;
    font-size: 12px; /* Adjust font size as needed */
  }
  .counter.max {
    color: red;
  }
</style>
</head>
<body>
<div class="container">
  <textarea id="inputText" rows="6" maxlength="150"></textarea>
  <div id="charCount" class="counter">0/150</div>
</div>

<script>
  const textArea = document.getElementById('inputText');
  const charCount = document.getElementById('charCount');
  const minWidth = 280; // Minimum width for the textarea

  textArea.addEventListener('input', function() {
    const textLength = textArea.value.length;
    charCount.textContent = `${textLength}/150`;

    if (textLength >= 150) {
      charCount.classList.add('max');
    } else {
      charCount.classList.remove('max');
    }
  });

  // Function to handle mousemove event for resizing
  function handleResize(event) {
    const mouseX = event.clientX;
    const textareaRect = textArea.getBoundingClientRect();
    const containerRect = textArea.parentNode.getBoundingClientRect();

    let newWidth = mouseX - textareaRect.left;

    // Ensure new width respects minimum width
    if (newWidth < minWidth) {
      newWidth = minWidth;
    }

    // Set new width to textarea
    textArea.style.width = newWidth + 'px';

    // Adjust counter position based on textarea width change
    charCount.style.right = `${containerRect.right - textareaRect.right + 10}px`;
  }

  // Listen for mousedown event on textarea for starting resize
  textArea.addEventListener('mousedown', function(event) {
    if (event.offsetX > textArea.offsetWidth - 10) {
      // Only start resize if mouse is near the right edge
      document.addEventListener('mousemove', handleResize);
    }
  });

  // Stop resizing on mouseup event
  document.addEventListener('mouseup', function() {
    document.removeEventListener('mousemove', handleResize);
  });

  // Initial check on load
  window.addEventListener('load', function() {
    const currentWidth = textArea.clientWidth;
    if (currentWidth < minWidth) {
      textArea.style.width = minWidth + 'px';
    }
  });
</script>
</body>
</html>

运行效果:

标签:const,textarea,textArea,charCount,minWidth,width,字数,event,输入
From: https://blog.csdn.net/kuang_nu/article/details/140081386

相关文章

  • 小狼毫输入法
    小狼毫输入法rime地址四叶草下载地址配置把四叶草下载解压复制到小狼毫用户文件夹候选词数量:程序文件夹-data-default.yaml中横屏显示输入:data-weasel.yaml后点重新部署设置同步配置用户文件夹-installation.yaml添加sync_dir:'C:\Users\Z\Documents\备份\win软......
  • java的输入流FileInput Stream类
    一、定义使用InputStream类的FileInputStream子类实现文本文件内容的读取。二、常用构造方法三、使用FileInputStream类按多字节读取数据1.示例 2、分析四、常见错误  今天的总结就到这里啦,拜拜!  ......
  • 文件输入
    文件输入是指从文件中读取数据并在程序中进行处理。这是编程中常见的操作,可以通过各种编程语言实现。这里以C++为例,介绍如何进行文件输入操作。1.包含必要的头文件在C++中,进行文件输入操作需要包含头文件<fstream>。 #include<iostream>#include<fstream>#include<str......
  • 第6篇:深入解析LangChain库的数据输入模块
    在自然语言处理(NLP)项目中,数据输入是整个流程的第一步,也是至关重要的一步。LangChain库的数据输入模块为开发者提供了一种高效、灵活的方式,从各种数据源读取数据。本篇博客将详细介绍LangChain库的数据输入模块,讲解如何从各种数据源读取数据,并通过具体代码示例展示其实现过程......
  • 中断的输入和悬起行为
    关于中断的输入和悬起行为,下列描述错误的是()A、当某中断的服务例程开始执行时,其悬起位会被硬件自动清除。B、如果在某个中断得到响应之前,其悬起状态被清除了,则中断取消。C、中断服务例程不可以在执行过程中把自己对应的中断重新悬起。D、当中断输入脚被assent后,该中断......
  • 定义多个类对象,分别输入和输出各对象中的时间(时:分:秒)
            在前面的文章中,类中只有公用数据而无成员函数,而且只有1个对象。可以直接在主函数中进行输入和输出。若有多个对象,需要分别引用多个对象中的数据成员,可以写出如下程序:(1)编写程序(a):        程序是清晰易懂的,但是在主函数中对不同的对象一一写出有关操......
  • Rocky Linux捣鼓记录(一):如何安装使用中文输入法
    linux的常见输入法方案有fcitx、ibus,fcitx类型的输入法我没找到合适方案,ibus提供了一个智能拼音中文输入法比较顺手,安装简单。我使用的系统版本为RockyLinux9.4,已经自带ibus中文输入法,从设置——keyboard中选择输入源,新增——汉语(中国)选择——中文(智能拼音)即可若系统中没有,......
  • 【经验分享】Ubuntu 24.04 安装搜狗输入法(亲测有效)
    【经验分享】Ubuntu24.04安装搜狗输入法(亲测有效)先用如下Ubuntu22.04的安装方法进行安装Ubuntu22.04安装搜狗输入法发现存在闪屏问题,那解决闪屏问题不就好了。解决方法如下:解决方法1Ubuntu24.04安装搜狗输入法-解决闪屏问题修改配置文件/etc/gdm3/custom.conf,强......
  • 智能门锁电池双节升压充电芯片-FP6291支持5V1A输入升压 8.4V双节电池充电
    方案背景智能门锁可充电池是为智能门锁提供电力支持的重要组件。常见的锂离子可充电池,体积小、能量密度高,在智能门锁中应用广泛。一些智能门锁可充电池还具备智能管理功能,可以实时监测电池电量,提醒用户及时充电,避免因电量不足而影响门锁使用。同时,在选择智能门锁可充电池时,要......
  • 智能指纹锁电池充电升压方案应用IC-FP6291-5V1A输入升压 8.4V充电方案
    方案介绍智能锁的可充电锂电池是一种环保、高效的智能锁电池类型,而FP6291升压芯片是可应用于智能门锁的一款支持5V1A输入锂电升压7.4V、8.4V充电方案的双节升压充电芯片。给智能门锁电池保持恒压,持续稳定,性能强悍适用各类高电压、强动力、大电流要求设备。接下来,雅欣给大家......