首页 > 网站 > WEB开发 > 正文

如何在前端实现语义缩放(第一步)

2024-04-27 14:09:35
字体:
来源:转载
供稿:网友

如何在前端实现语义缩放(第一步)

在phone中找联系人的时候,点击那个拼音首字母,26个字母会在当前屏幕全部显示。这种语义缩放在WP中是一种控件。所有歌曲的名称也可以这样快速查找。

对于小的手机屏幕不适合一页一页的翻页,这个语义缩放真是太方便了。

在JS中怎么实现,先上图:

源代码:

 <ul id="l1" class="no-dot content">            <li>关怀</li>            <li>测试</li>            <li>阿女</li>            <li>第三方</li>            <li>谁谁谁</li>            <li>模糊</li>            <li>电话</li>            <li>发送</li>            <li>沟通</li>            <li>句</li>            <li>当天</li>            <li>当前</li>            <li>代码</li>            <li>但是</li>            <li>仍然</li>            <li>稳稳</li>        </ul>

通过对比,可以发现,按拼音首字母已经排序了。并且在每组(按首字母分组)的第一个词语前加上了首字母拼音。

做这个功能的关键是,所有汉字的拼音字典。(网上很多,一个JSON即可)

JS中的关键函数是get,输入汉字,返回拼音。

var Pinyin = {} Pinyin._ucfirst = function (l1) {    if (l1.length > 0) {        var first = l1.substr(0, 1).toUpperCase();        var spare = l1.substr(1, l1.length);        return first + spare;    }}Pinyin._arraySearch = function (l1, l2) {    for (var name in this._pinyin) {        if (this._pinyin[name].indexOf(l1) != -1) {            return this._ucfirst(name); break;        }    }    return false;}Pinyin.get = function (l1) {    var l2 = l1.length;    var I1 = "";    var reg = new RegExp('[a-zA-Z0-9/- ]');    for (var i = 0; i < l2; i++) {        var val = l1.substr(i, 1);//拆分后的输入字符               var name = this._arraySearch(val, this._pinyin);//不为false表示找到的拼音        if (reg.test(val)) {//半角字母或数字输出原字符            I1 += val;        } else if (name !== false) {            I1 += name;        }    }    I1 = I1.replace(/ /g, '-');    while (I1.indexOf('--') > 0) {        I1 = I1.replace('--', '-');    }    return I1;}

完整的HTMl源码

<head>    <meta name="viewport" content="width=device-width" />    <title>List</title>    <script src="~/Scripts/Pinyin.js"></script>    <script src="~/Scripts/jquery-1.8.2.js"></script>    <script>        var usableLetter = [];        function appendFirstLetterOfPinyin(list)        {            var lis = $('li', list).each(function () {                var fp = getFP(this);                $(this).data('fp', fp);            }).sort(sort);            $(list).html(lis);            $('li', list).each(function (index, item) {                (function (me) {                    var fp = getFP(me);                    if (index === 0) {                        insertFP(fp, me);                    }                    else {                        var l_fp = getFP($('li:eq(' + (index -1) + ')', list));                        console.log(l_fp + " - " + fp);                        if (fp != l_fp) {                            usableLetter.push(fp);                            insertFP(fp, me);                        }                    }                })(this);                           })        }        function insertFP(fp,target)        {            $('<div class="flag" >' + '<a href="#' + fp + '">' + fp + '</a></div>').insertBefore(target);        }        function getFP(t) {            var fw = $(t).text().substring(0, 1);            var fp = Pinyin.get(fw).substring(0, 1);            return fp;        }        function sort(a, b) {            var _a = $(a).data('fp').charCodeAt(0);            var _b = $(b).data('fp').charCodeAt(0);            return _a - _b;        }        $(function () {            appendFirstLetterOfPinyin($('#l1'));        })    </script>    <style>        .flag {            width: 16px;            height: 16px;            padding: 2px;            text-align: center;            background-color: rgba(20, 181, 111, 0.92);            color: white;            cursor:pointer;        }        .no-dot {            list-style: none;        }        ul :first-child ::before {                     }        .flag a        {            text-decoration:none;            color:white;        }         .content li {        }    </style></head><body>    <div>                <ul id="l1" class="no-dot content">            <li>关怀</li>            <li>测试</li>            <li>阿女</li>            <li>第三方</li>            <li>谁谁谁</li>            <li>模糊</li>            <li>电话</li>            <li>发送</li>            <li>沟通</li>            <li>句</li>            <li>当天</li>            <li>当前</li>            <li>代码</li>            <li>但是</li>            <li>仍然</li>            <li>稳稳</li>        </ul>    </div></body>

接下来是添加拼音首字母事件,点击后一屏出现26个字母,可用的字母用亮色表示,不可用的字母用暗色背景表示。然后点击可用字母后自动定位。

扩展用途:定位时自动获取翻页数据。

适用场景:小屏幕上找列表项是词语或短语的又需要翻页的。这个比传统的翻页更方便。

(拼音JSON较大,稍后附上)


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表