B站个性签名:怎么实现就地编辑功能

242 阅读2分钟

预览

为什么要就地编辑功能?

在B站个人主页里,编辑个性签名,在鼠标没有处于范围里时,处于文本状态

image.png

鼠标移到范围内时,就会处于编辑状态。 image.png

这体现了就地编辑功能的特点:提升Web交互体验、实现概览

实现就地编辑

下面直接上代码

HTML结构

<div id="signature"></div>
<script src="./edit_in_place.js"></script>
<script>
    const STORAGEKEY = 'signature';
    const signature = localStorage.getItem(STORAGEKEY) || "这个家伙很懒,什么都没有留下";
    new EditInPlace(STORAGEKEY, document.getElementById('signature'), signature);
</script>
1function EditInPlace(storageKey, container, value = '这个家伙很懒,什么都没有留下') {
    this.storageKey = storageKey;
    this.container = container;
    this.value = value;
    this.createElement();
    this.attachEvents();
}
  • 初始化EditInPlace构造函数接收存储键名、容器元素和签名默认值作为参数,然后调用了createElementattachEvents方法来创建和绑定事件。

2. 创建编辑元素

createElement: function() {
    // ...创建div、span、input等元素的代码
}
  • 创建DOM结构: 在这个方法中,动态生成了包含静态文本展示、输入框、保存和取消按钮的DOM结构,并将其添加到指定的容器中。

3. 切换显示状态

converToText: function() { /* 隐藏编辑元素,显示文本 */ }
converToEdit: function() { /* 显示编辑元素,隐藏文本 */ }
  • 状态转换: 提供了两个方法用于在文本显示状态和编辑状态之间切换,通过修改DOM元素的display属性实现。

4. 事件绑定

1attachEvents: function() {
    // 使用箭头函数保持this上下文
    this.staticElement.addEventListener('mousemove', () => this.converToEdit());
    this.saveButton.addEventListener('click', () => this.save());
    this.cancleButton.addEventListener('click', () => this.converToText());
}
  • 事件处理: 绑定了鼠标悬浮、保存和取消按钮的点击事件,利用箭头函数维持了正确的this上下文。

5. 保存数据


save: function() {
    this.value = this.fieldElement.value;
    this.staticElement.innerHTML = this.value;
    this.converToText();
    localStorage.setItem(this.storageKey, this.value);
}
  • 数据持久化: 当用户点击保存时,更新签名值,同步到静态文本显示,并将新值存储到本地存储中,确保数据持久化。

当我们运行时,页面上没有编辑框,只显示一串文字 image.png

当我们把鼠标移到文本上时,js就利用事件监听,来获取用户操作,并且把文本变成可编辑状态,把保存和取消按钮显示出来

image.png

在我们修改时,并且点击保存,修改后的内容就会保存到本地

image.png

利用signautre方式存入浏览器本地内存,在你刷新后也可以保存你的修改内容

image.png

总结

这段代码通过创建EditInPlace类,实现了在网页中直接编辑文本内容的功能,并且通过HTML5的localStorage特性,使得编辑内容在页面刷新后仍然得以保留。从创建DOM元素、绑定事件监听到处理数据存储,每一步都紧密相连,共同构建了一个简洁而实用的就地编辑组件。