npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

who-are-you-laji-keyboard

v1.0.8

Published

谁啊你拉吉键盘 Version1.0.8更新了键盘样式的问题,新增输入中文时也可以点击拼音回填

Downloads

3

Readme

中文虚拟键盘

一个支持中文拼音输入、英文输入和符号输入的虚拟键盘组件。

特性

  • 🇨🇳 中文输入:基于拼音输入,使用内置简化字库进行汉字匹配
  • 🇺🇸 英文输入:标准 QWERTY 键盘布局
  • 🔣 符号输入:常用符号和特殊字符
  • 📱 响应式设计:专为竖屏设备优化(如 1080×1920 分辨率)
  • 框架无关:纯 JavaScript 实现,可适配 Vue、React、Uniapp 等
  • 🚀 零依赖:无需外部库,开箱即用
  • 💡 超简集成:一行代码即可使用

安装

NPM 安装(推荐)

npm install chinese-virtual-keyboard

CDN 引入

<!-- CSS -->
<link rel="stylesheet" href="https://unpkg.com/chinese-virtual-keyboard/dist/keyboard.css">

<!-- JavaScript -->
<script src="https://unpkg.com/chinese-virtual-keyboard/dist/keyboard.min.js"></script>

快速开始

NPM 使用方法(推荐)

// ES6 模块引入
import { initChineseKeyboard, autoInitChineseKeyboard } from 'chinese-virtual-keyboard';
import 'chinese-virtual-keyboard/dist/keyboard.css';

// 一行代码搞定
autoInitChineseKeyboard();

// 或者自定义配置
const keyboard = initChineseKeyboard({
  mode: 'chinese',
  autoShow: true
});

CommonJS 使用方法

const { initChineseKeyboard } = require('chinese-virtual-keyboard');

// 引入样式(如果使用构建工具)
require('chinese-virtual-keyboard/dist/keyboard.css');

// 初始化键盘
const keyboard = initChineseKeyboard();

CDN 使用方法

<!-- 1. 引入文件 -->
<link rel="stylesheet" href="https://unpkg.com/chinese-virtual-keyboard/dist/keyboard.css">
<script src="https://unpkg.com/chinese-virtual-keyboard/dist/keyboard.min.js"></script>

<!-- 2. 一行代码搞定 -->
<script>
  autoInitChineseKeyboard();
</script>

本地文件使用方法

<!-- 1. 引入文件 -->
<link rel="stylesheet" href="src/keyboard.css">
<script src="src/keyboard.js"></script>

<!-- 2. 一行代码搞定 -->
<script>
  autoInitChineseKeyboard();
</script>

就这么简单!现在页面上的所有输入框都会自动支持虚拟键盘。

自定义配置

// 带配置的初始化
const keyboard = initChineseKeyboard({
  mode: 'chinese',        // 默认模式:chinese/english/symbol
  autoShow: true,         // 自动显示键盘
  autoHide: true,         // 自动隐藏键盘
  onModeChange: (mode) => console.log('模式切换:', mode)
});

框架集成

Vue 3

<template>
  <div>
    <input v-model="inputText" placeholder="开始输入..." />
  </div>
</template>

<script>
import { initChineseKeyboard } from 'chinese-virtual-keyboard';
import 'chinese-virtual-keyboard/dist/keyboard.css';

export default {
  data() {
    return {
      inputText: ''
    };
  },
  mounted() {
    // 一行代码搞定
    this.keyboard = initChineseKeyboard();
  },
  beforeUnmount() {
    this.keyboard?.destroy();
  }
};
</script>

Vue 2

<template>
  <div class="keyboard-demo">
    <!-- 基础输入 -->
    <div class="input-group">
      <label>单行输入框:</label>
      <input 
        v-model="formData.username" 
        type="text" 
        placeholder="请输入用户名..."
        class="demo-input"
      />
    </div>

    <!-- 多行输入 -->
    <div class="input-group">
      <label>多行文本:</label>
      <textarea 
        v-model="formData.description" 
        placeholder="请输入描述信息..."
        rows="4"
        class="demo-input"
      ></textarea>
    </div>

    <!-- 表单输入 -->
    <div class="input-group">
      <label>邮箱地址:</label>
      <input 
        v-model="formData.email" 
        type="email" 
        placeholder="请输入邮箱..."
        class="demo-input"
      />
    </div>

    <!-- 显示输入内容 -->
    <div class="result">
      <h3>输入结果:</h3>
      <p><strong>用户名:</strong>{{ formData.username }}</p>
      <p><strong>描述:</strong>{{ formData.description }}</p>
      <p><strong>邮箱:</strong>{{ formData.email }}</p>
    </div>

    <!-- 键盘控制按钮 -->
    <div class="controls">
      <button @click="showKeyboard" class="btn">显示键盘</button>
      <button @click="hideKeyboard" class="btn">隐藏键盘</button>
      <button @click="switchMode('chinese')" class="btn">中文模式</button>
      <button @click="switchMode('english')" class="btn">英文模式</button>
      <button @click="switchMode('symbol')" class="btn">符号模式</button>
    </div>
  </div>
</template>

<script>
import { initChineseKeyboard } from 'chinese-virtual-keyboard';
import 'chinese-virtual-keyboard/dist/keyboard.css';

export default {
  name: 'KeyboardDemo',
  data() {
    return {
      keyboard: null,
      formData: {
        username: '',
        description: '',
        email: ''
      }
    };
  },
  mounted() {
    // 初始化键盘
    this.initKeyboard();
  },
  beforeDestroy() {
    // Vue2 使用 beforeDestroy
    if (this.keyboard) {
      this.keyboard.destroy();
    }
  },
  methods: {
    // 初始化键盘
    initKeyboard() {
      this.keyboard = initChineseKeyboard({
        mode: 'chinese',           // 默认中文模式
        autoShow: true,            // 自动显示
        autoHide: true,            // 自动隐藏
        onModeChange: this.handleModeChange,
        onShow: this.handleKeyboardShow,
        onHide: this.handleKeyboardHide
      });
    },

    // 手动显示键盘
    showKeyboard() {
      if (this.keyboard) {
        this.keyboard.show();
      }
    },

    // 手动隐藏键盘
    hideKeyboard() {
      if (this.keyboard) {
        this.keyboard.hide();
      }
    },

    // 切换键盘模式
    switchMode(mode) {
      if (this.keyboard) {
        this.keyboard.setMode(mode);
      }
    },

    // 模式切换回调
    handleModeChange(mode) {
      console.log('键盘模式切换为:', mode);
      this.$emit('mode-change', mode);
    },

    // 键盘显示回调
    handleKeyboardShow() {
      console.log('键盘已显示');
      this.$emit('keyboard-show');
    },

    // 键盘隐藏回调
    handleKeyboardHide() {
      console.log('键盘已隐藏');
      this.$emit('keyboard-hide');
    }
  }
};
</script>

<style scoped>
.keyboard-demo {
  max-width: 600px;
  margin: 0 auto;
  padding: 20px;
}

.input-group {
  margin-bottom: 20px;
}

.input-group label {
  display: block;
  margin-bottom: 8px;
  font-weight: bold;
  color: #333;
}

.demo-input {
  width: 100%;
  padding: 12px;
  border: 2px solid #ddd;
  border-radius: 6px;
  font-size: 16px;
  box-sizing: border-box;
}

.demo-input:focus {
  outline: none;
  border-color: #007bff;
}

.result {
  background: #f8f9fa;
  padding: 15px;
  border-radius: 6px;
  margin: 20px 0;
}

.result h3 {
  margin-top: 0;
  color: #007bff;
}

.controls {
  display: flex;
  gap: 10px;
  flex-wrap: wrap;
}

.btn {
  padding: 8px 16px;
  background: #007bff;
  color: white;
  border: none;
  border-radius: 4px;
  cursor: pointer;
  font-size: 14px;
}

.btn:hover {
  background: #0056b3;
}
</style>

Vue 2 组合式使用

<template>
  <div>
    <!-- 使用键盘组件 -->
    <ChineseKeyboard 
      :auto-show="true"
      :mode="keyboardMode"
      @mode-change="onModeChange"
      @keyboard-show="onKeyboardShow"
      @keyboard-hide="onKeyboardHide"
    />
    
    <!-- 你的输入表单 -->
    <form>
      <input v-model="username" placeholder="用户名" />
      <textarea v-model="message" placeholder="留言"></textarea>
    </form>
  </div>
</template>

<script>
// 创建一个可复用的键盘组件
const ChineseKeyboard = {
  props: {
    autoShow: {
      type: Boolean,
      default: true
    },
    mode: {
      type: String,
      default: 'chinese'
    }
  },
  data() {
    return {
      keyboard: null
    };
  },
  async mounted() {
    // 动态导入(可选)
    const { initChineseKeyboard } = await import('chinese-virtual-keyboard');
    
    this.keyboard = initChineseKeyboard({
      mode: this.mode,
      autoShow: this.autoShow,
      onModeChange: (mode) => this.$emit('mode-change', mode),
      onShow: () => this.$emit('keyboard-show'),
      onHide: () => this.$emit('keyboard-hide')
    });
  },
  beforeDestroy() {
    if (this.keyboard) {
      this.keyboard.destroy();
    }
  },
  watch: {
    mode(newMode) {
      if (this.keyboard) {
        this.keyboard.setMode(newMode);
      }
    }
  },
  render(h) {
    return h('div'); // 键盘会自动添加到 body
  }
};

export default {
  components: {
    ChineseKeyboard
  },
  data() {
    return {
      username: '',
      message: '',
      keyboardMode: 'chinese'
    };
  },
  methods: {
    onModeChange(mode) {
      console.log('模式变更:', mode);
    },
    onKeyboardShow() {
      console.log('键盘显示');
    },
    onKeyboardHide() {
      console.log('键盘隐藏');
    }
  }
};
</script>

React

import { useEffect } from 'react';
import { initChineseKeyboard } from 'chinese-virtual-keyboard';
import 'chinese-virtual-keyboard/dist/keyboard.css';

function App() {
  useEffect(() => {
    const keyboard = initChineseKeyboard();
    return () => keyboard.destroy();
  }, []);

  return (
    <div>
      <input placeholder="开始输入..." />
    </div>
  );
}

Angular

// app.component.ts
import { Component, OnInit, OnDestroy } from '@angular/core';
import { initChineseKeyboard } from 'chinese-virtual-keyboard';

@Component({
  selector: 'app-root',
  template: '<input placeholder="开始输入..." />'
})
export class AppComponent implements OnInit, OnDestroy {
  private keyboard: any;

  ngOnInit() {
    this.keyboard = initChineseKeyboard();
  }

  ngOnDestroy() {
    this.keyboard?.destroy();
  }
}
/* angular.json 或 styles.css 中添加 */
@import '~chinese-virtual-keyboard/dist/keyboard.css';

原生HTML

<body>
  <input type="text" placeholder="输入框" />
  
  <!-- CDN 方式 -->
  <link rel="stylesheet" href="https://unpkg.com/chinese-virtual-keyboard/dist/keyboard.css">
  <script src="https://unpkg.com/chinese-virtual-keyboard/dist/keyboard.min.js"></script>
  
  <!-- 初始化 -->
  <script>autoInitChineseKeyboard();</script>
</body>

API 参考

快速方法

// 超简初始化(推荐)
autoInitChineseKeyboard();

// 带配置初始化
const keyboard = initChineseKeyboard(options);

配置选项

| 选项 | 类型 | 默认值 | 说明 | |------|------|--------|------| | mode | string | 'chinese' | 默认键盘模式:'chinese', 'english', 'symbol' | | autoShow | boolean | true | 输入框获得焦点时自动显示键盘 | | autoHide | boolean | true | 输入框失去焦点时自动隐藏键盘 | | target | Element | document.body | 键盘容器元素 | | onModeChange | function | null | 模式切换回调 | | onShow | function | null | 键盘显示回调 | | onHide | function | null | 键盘隐藏回调 |

实例方法

const keyboard = initChineseKeyboard();

keyboard.show();              // 显示键盘
keyboard.hide();              // 隐藏键盘
keyboard.setMode('english');  // 切换模式
keyboard.destroy();           // 销毁键盘

NPM 包信息

# 安装
npm install chinese-virtual-keyboard

# 查看版本
npm list chinese-virtual-keyboard

# 更新到最新版本
npm update chinese-virtual-keyboard

包大小

  • 压缩后 JS: ~15KB
  • 压缩后 CSS: ~8KB
  • 总大小: ~23KB

支持的模块系统

  • ✅ ES6 Modules (import/export)
  • ✅ CommonJS (require/module.exports)
  • ✅ UMD (浏览器全局变量)
  • ✅ TypeScript 支持(包含类型定义)

浏览器兼容性

  • ✅ Chrome 60+
  • ✅ Firefox 55+
  • ✅ Safari 12+
  • ✅ Edge 79+
  • ✅ 移动端浏览器

演示

更新日志

v1.0.0

  • 🎉 首次发布
  • ✨ 支持中文拼音输入、英文输入、符号输入
  • 🚀 零依赖,一行代码集成
  • 📱 响应式设计,移动端优化
  • 🔧 支持多种框架集成

开发和贡献

本地开发

# 克隆项目
git clone https://github.com/your-username/chinese-virtual-keyboard.git

# 进入目录
cd chinese-virtual-keyboard

# 安装依赖(如果有)
npm install

# 打开演示
open demo.html

构建发布

# 构建生产版本
npm run build

# 发布到 NPM
npm publish

许可证

MIT License - 详见 LICENSE 文件

问题反馈

如有问题或建议,请提交 Issues

贡献

欢迎提交 Pull Request 来改进这个项目!


⭐ 如果这个项目对您有帮助,请给个 Star 支持一下!