ATJS 位置
背景介绍
ATJS(At.js)是一个开源的 JavaScript 库,用于实现类似于微博、Twitter 等社交平台中的“@”提及功能,它允许用户在输入特定字符(通常是“@”)后,动态显示一个下拉列表供用户选择要提及的用户,ATJS 支持 HTML5 的 contentEditable 属性,使得开发者可以轻松地将该功能集成到富文本编辑器中。
产品架构
智能定位:通过识别用户输入的“@”符号,自动触发提及功能的候选列表。
数据绑定:支持从远程服务器获取用户数据,或使用本地 JSON 数据作为候选列表的来源。
模板渲染:允许自定义下拉列表的显示模板,包括用户头像、昵称等信息。
事件处理:提供丰富的事件回调,如选择事件、插入事件等,方便开发者进行扩展和定制。
应用场景
社交媒体平台:如微博、Twitter 等,用于实现用户之间的提及功能。
内部沟通工具:如企业微信、钉钉等,用于团队成员之间的快速沟通和协作。
论坛和社区:用于帖子和评论中的用户提及,增加互动性和参与感。
核心功能
自动完成:根据用户输入实时显示匹配的候选列表。
内容可编辑:支持在 contentEditable 元素中使用,适用于富文本编辑器。
自定义模板:允许开发者自定义下拉列表的显示样式和内容。
键盘和鼠标控制:支持使用键盘和鼠标进行导航和选择。
技术实现
引入必要的资源
要使用 ATJS,首先需要引入 jQuery 以及 ATJS 的核心文件:
<link rel="stylesheet" type="text/css" href="styles/jquery.atwho.css"> <script type="text/javascript" src="scripts/jquery.js"></script> <script type="text/javascript" src="dist/js/jquery.atwho.js"></script>
HTML 结构
创建一个可编辑的div
,并设置contentEditable
属性为true
:
<div id="editable" class="inputor" contentEditable="true"></div>
CSS 样式
为了美化输入框和提及效果,可以添加一些基本的样式:
.inputor { height: 160px; width: 90%; border: 1px solid #dadada; border-radius: 4px; padding: 5px 8px; outline: 0 none; margin: 10px 0; background: white; font-size: inherit; overflow-y: scroll; } .inputor:focus { border: 1px solid rgb(6, 150, 247); } .inputor span{ color: #3366FF; }
JavaScript 初始化
使用 JavaScript 初始化 ATJS,配置触发字符、数据源、插入模板和显示模板:
$(function(){ var at_config = { at: "@", // 触发字符 data: 'people.json', // 数据源,可以是本地 JSON 文件或远程 URL insertTpl: '<span data-id="${id}">@${name}</span>', // 插入模板 displayTpl: "<li> ${name} </li>", // 显示模板 limit: 200 // 最大显示数量 }; $('#editable').atwho(at_config); // 初始化 });
处理粘贴问题
为了解决粘贴时格式错乱的问题,可以使用以下代码:
(function(){ $('[contenteditable]').each(function() { $(this).on('paste', function(e) { e.preventDefault(); var text = null; if(window.clipboardData && clipboardData.setData) { text = window.clipboardData.getData('Text'); } else { text = (e.originalEvent || e).clipboardData.getData('text/plain') || prompt('在这里输入文本'); } if (document.body.createTextRange) { var range = document.selection.createRange(); range.pasteHTML(text); range.collapse(false); range.select(); } else if (window.getSelection) { var sel = window.getSelection(); var range = sel.getRangeAt(0); var tempEl = document.createElement("span"); tempEl.innerHTML = "&#FEFF;"; range.deleteContents(); range.insertNode(tempEl); var textRange = document.body.createTextRange(); textRange.moveToElementText(tempEl); tempEl.parentNode.removeChild(tempEl); textRange.text = text; textRange.collapse(false); textRange.select(); } else { document.execCommand("insertText", false, text); } }); }); })();
与本文相关的两个问题与解答
问题1:如何更改 ATJS 的触发字符?
答:可以通过修改at_config
对象中的at
属性来更改触发字符,将at
设置为#
,则输入#
时会触发提及功能:
var at_config = { at: "#", // 触发字符改为井号 # // 其他配置... };
问题2:如何从服务器动态获取候选数据?
答:可以通过设置at_config
对象中的callbacks
属性,使用filter
方法从服务器获取数据。
var at_config = { at: "@", callbacks: { remoteFilter: function(query, callback) { $.ajax({ url: "/search", // 替换为你的服务器端接口地址 dataType: "json", data: { q: query }, success: function(data) { callback(data); // 将返回的数据传递给回调函数 } }); } }, // 其他配置... };
以上就是关于“atjs位置”的问题,朋友们可以点击主页了解更多内容,希望可以够帮助大家!
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/644483.html