[web效果实现-3] 拼音排序通讯录实现

通讯录已经成为app的一种基本功能,将中文汉字按照一定顺序排序(一般为第一个汉字的首字母从A到Z顺序排序)。

以下部分使用小茗同学的转化方案:
github链接:https://github.com/sxei/pinyinjs/
demo示例:http://demo.haoji.me/pinyinjs/?from=xa
博客链接:【干货】JS版汉字与拼音互转终极方案,附简单的JS拼音输入法

测试demo

首先,根据原demo测试,发现当前需要的效果实际更简单,只需要获取到汉字的首字母即可。故,第一步写一个简单的demo,测试是否可以获取字符串为汉字时的首字母。
代码如下:


<html>
 <head>
    <style>style>
    <script src="pinyin_dict_firstletter.js">script>
    <script src="pinyinUtil.js">script>
head>
<body>
   <input type="text" id="name"/>
   <p  id="result">p>
   <script>
     var result = document.getElementById('result');
     var ip = document.getElementById('name');
     ip.addEventListener('input',function(){
       result.innerHTML=pinyinUtil.getFirstLetter(ip.value); // 输出 XMTX
     },false);
   script>
body>
html>

效果如下:
- 事件为input
示例1
- 若将事件改为blur
示例2
-若将事件改为keydown
示例3
-若将事件改为keypress
示例4
-若将事件改为change
示例5
区别:

事件 定义 具体表现形式
input input的value发生变化时就会发生,无论是键盘输入还是鼠标粘贴的改变都能即时监听到 实时获取键盘输入字符,输入完毕后直接触发事件
blur 丢失焦点触发 不实时获取输入,输入完毕后,输入框丢失焦点触发事件
keydown 按钮被按下触发 实时获取键盘输入字符,输入完毕后需输入enter才能触发
keypress 触发:按键被按下/ 按键被松开 不实时获取键盘输入字符,输入完毕后需输入enter才能触发
change 用户改变域的容时触发 效果略同blur
propertychange 功能同oninput,用以替代oninput在IE9以下的不兼容性

因此,在许多jquery的监听输入中,可见事件”input propertychange”,如:

$(function(){ 
    $('#username').bind('input propertychange', function() {  
    $('#result').html($(this).val().length + ' characters');  
  });  
})  

通讯录简易实现

按照A-Z顺序排列通讯录姓名即可。
代码如下:


<html>
 <head>
    <style>style>
    <script src="pinyin_dict_firstletter.js">script>
    <script src="pinyinUtil.js">script>
head>
<body>
  <ul id="result">ul>
   <script>
     var result = document.getElementById('result');
     var arrName=["何三","黄四","李五","陈心","邱久久"],sortedName={};
     var str="ABCDEFGHIJKLMNOPQRSTUVWXYZ",strArr=str.split("");
     for(var val of arrName){
       var ch = pinyinUtil.getFirstLetter(val).charAt(0);
       if(sortedName[ch]){
         sortedName[ch].push(val);
       }else{
         sortedName[ch]=[val];
       }
     }
     //sort
     for(var val of strArr){
       if(sortedName[val]){
         var str = val+":"+sortedName[val].toString();
         var temp = document.createElement('li');
         temp.innerHTML = str;
         result.append(temp);
       }
     }
   script>
body>
html>

效果如下:
[web效果实现-3] 拼音排序通讯录实现_第1张图片
css效果暂时省略。

出现的问题

  • js变量命名注意不要使用关键字,如name,否则报错很莫名其妙。

你可能感兴趣的:(web开发,js-demo)