当前位置: 首页 > news >正文

惠州响应式网站建设公司电子商务网站功能设计与分析

惠州响应式网站建设公司,电子商务网站功能设计与分析,seo优化技术排名,网站建设前期准备工作💻 在 Electron 中实现类浏览器的 CtrlF 全局搜索功能(Vue2 mark.js)本文介绍如何在 Electron 应用中构建一个像 Chrome 一样的 CtrlF 查找框,支持全局高亮、滚动定位、关键词计数与上下跳转。✨ 背景 在网页浏览器中&#xff0c…

💻 在 Electron 中实现类浏览器的 Ctrl+F 全局搜索功能(Vue2 + mark.js)

本文介绍如何在 Electron 应用中构建一个像 Chrome 一样的 Ctrl+F 查找框,支持全局高亮、滚动定位、关键词计数与上下跳转。


在这里插入图片描述

✨ 背景

在网页浏览器中,Ctrl+F 是用户非常熟悉的操作,用于快速搜索页面内容。而 Electron 作为构建桌面应用的强大工具,默认没有提供类似功能,除了使用electron的findInPage api,直接在渲染进程即页面代码中实现也是一种方案,mark.js开源库可以简单快速实现功能:

  • 关键词高亮
  • 跳转到目标项
  • 支持多次匹配
  • 上下导航、实时计数

📦 安装 mark.js

npm install mark.js

mark.js 是一个轻量级的 JavaScript 高亮库,用于在网页上高亮关键词,常用于搜索结果展示。

✅ 主要功能

在指定容器内高亮关键词

支持排除特定元素(通过 exclude 选项)

⚙️基本原理简化说明

遍历 DOM 节点:递归遍历所有子节点(跳过排除节点)。

查找匹配:在文本节点中使用正则或字符串查找关键词。

插入<mark>标签:将关键词部分包裹在<mark>元素中插入 DOM


🧩 功能组件结构

我们封装了一个 SearchBox 组件,挂载到 App.vue 中,监听全局 keydown 事件,只要按下 Ctrl+F,搜索框就会弹出。

💡 核心特性:

功能点实现说明
Ctrl+F 打开搜索框keydown 全局监听
ESC 或点击 X 关闭搜索框清除高亮并隐藏组件
实时搜索关键词使用 mark.js 动态高亮
上下跳转匹配项通过数组索引控制焦点
当前项橙色,其它项黄色样式区分当前匹配项
平滑过渡动画transition + CSS 动画

🧩 组件代码(SearchBox.vue)

🔎 mark.js 搜索

const instance = new Mark(document.body);
instance.mark(this.keyword, {separateWordSearch: false,exclude: ['.count_num'], // 可排除domdone: () => {const elements = document.querySelectorAll('mark');this.markedElements = Array.from(elements);this.total = this.markedElements.length;this.current = 0;}
});

🔁 上下跳转高亮逻辑

highlightCurrent() {this.markedElements.forEach((el, i) => {el.style.backgroundColor = i + 1 === this.current ? 'orange' : 'yellow';el.style.color = i + 1 === this.current ? '#000' : '';});this.markedElements[this.current - 1]?.scrollIntoView({block: 'center',});
}

🎬 动画过渡

.slide-fade-enter-active,
.slide-fade-leave-active {transition: all 0.3s ease;
}
.slide-fade-enter,
.slide-fade-leave-to {transform: translateY(-20px);opacity: 0;
}

📥 App.vue 中挂载组件

App.vue 引入:

<template><div id="app"><SearchBox /><router-view /></div>
</template><script>
import SearchBox from './components/SearchBox.vue';export default {components: { SearchBox },
};
</script>

✅ 效果预览

  1. Ctrl+F 打开搜索框
  2. 输入关键词即时高亮
  3. 显示总匹配数 + 当前索引
  4. 点击上下箭头跳转目标
  5. X 关闭框并清除所有高亮

整体交互体验几乎还原浏览器的搜索能力


🔚 结语与完整代码

通过 mark.js 和 Vue 的组合,我们就能在 Electron 中还原 Ctrl+F 搜索体验。

可直接复制下方代码在项目中使用。

<template><transition name="slide-fade"><divv-if="visible"class="search-box"><inputv-model="keyword"@input="onInput"placeholder="搜索..." /><span class="count"><span class="count_num">{{ current }}/{{ total }}</span></span><iclass="vxe-icon-arrow-up":class="{ disabled: total === 0 }"@click="prev"></i><iclass="vxe-icon-arrow-down":class="{ disabled: total === 0 }"@click="next"></i><iclass="vxe-icon-close"@click="close"></i></div></transition>
</template><script>
import Mark from 'mark.js';export default {data() {return {keyword: '',current: 0,total: 0,visible: false,markedElements: [],};},mounted() {document.addEventListener('keydown', this.onKeydown);},beforeDestroy() {document.removeEventListener('keydown', this.onKeydown);},methods: {onKeydown(e) {console.log(111, e);if ((e.ctrlKey || e.metaKey) && (e.key === 'f' || e.key === 'F')) {e.preventDefault();this.visible = true;this.$nextTick(() => this.$el.querySelector('input').focus());}},close() {this.visible = false;this.clearMarks();this.keyword = '';this.current = 0;this.total = 0;},onInput() {this.clearMarks();if (!this.keyword.trim()) {this.current = 0;this.total = 0;return;}const instance = new Mark(document.body);instance.mark(this.keyword, {separateWordSearch: false,exclude: ['.czp-link', '.count_num'],done: () => {const elements = document.querySelectorAll('mark');this.markedElements = Array.from(elements);this.total = this.markedElements.length;this.current = 0;},});},clearMarks() {const instance = new Mark(document.body);instance.unmark();this.markedElements = [];},highlightCurrent() {this.markedElements.forEach((el, i) => {el.style.backgroundColor = i + 1 === this.current ? 'orange' : 'yellow';el.style.color = i + 1 === this.current ? '#000' : '';});if (this.markedElements[this.current - 1]) {this.markedElements[this.current - 1].scrollIntoView({//   behavior: 'smooth',block: 'center',});}},next() {if (this.total === 0) return;this.current = this.current < this.total ? this.current + 1 : 1;this.highlightCurrent();},prev() {if (this.total === 0) return;this.current = this.current > 1 ? this.current - 1 : this.total;this.highlightCurrent();},},
};
</script><style lang="scss" scoped>
.search-box {position: fixed;top: 60px;right: 15px;background: #fff;border: 1px solid #ccc;box-shadow: 0 2px 6px rgba(0, 0, 0, 0.15);border-radius: 4px;padding: 6px 10px;display: flex;align-items: center;z-index: 9999;font-size: 14px;input {flex: 1;padding: 4px 8px;border: 1px solid #ddd;border-radius: 3px;outline: none;}.count {min-width: 40px;text-align: center;color: #555;margin-left: 10px;margin-right: 10px;}.vxe-icon-arrow-up {font-size: 14px;color: #535353;cursor: pointer;}.vxe-icon-arrow-down {font-size: 14px;color: #535353;margin-left: 15px;cursor: pointer;}.vxe-icon-close {font-size: 10px;font-weight: bold;color: #535353;margin-left: 15px;cursor: pointer;}.disabled {color: #a9a9aa;cursor: not-allowed;}
}.slide-fade-enter-active {transition: all 0.3s ease;
}
.slide-fade-leave-active {transition: all 0.3s ease;
}
.slide-fade-enter {transform: translateY(-20px);opacity: 0;
}
.slide-fade-leave-to {transform: translateY(-20px);opacity: 0;
}
</style>
http://www.dtcms.com/a/413364.html

相关文章:

  • 查公司查企业用什么网站局域网搭建工具
  • 门户类网站模板网站建设可以先备案嘛
  • 上海网站建设排名公司哪家好建设银行网站登陆二星是什么意思
  • 网站规划与设计案例网站建设网络
  • 网站定制设计价目表2345网址大全浏览器下载
  • 修改网站图标网站安全建设管理制度
  • 做网站什么什么网站建设好与管理在哪就业
  • 网页制作与网站建设试卷百度收录网站链接
  • 建设手机移动网站栖霞网站设计
  • 免费网站建设找哪家微信如何开小程序
  • 北京公司网站建站免费网站软件下载大全动漫
  • html自学优化wordpress调用文章函数
  • 济南 网站定制app模板
  • 网站建设佰首选金手指六阿里大数据官网
  • 开封旅游网站建设项目方案zenme用ps做网站图
  • 简述jsp网站架构ppt模板免费下载 素材第一ppt
  • 网站设计标杆企业网站的网络公司
  • 不用模板怎么建设网站招标信息网
  • 网站如何添加认证联盟招聘网站开发需要多长时间
  • 24小时二手表网站司法局网站建设工作汇报
  • 推广做黄页网站高大上的企业网站欣赏
  • 建设网站课程设计摘要赶集网招聘
  • 中国建设银行网站包头分行淘宝网站建设手机版
  • 亿网互联桂林网站优化价格
  • 快速搭建网站域名绑定设置杭州建设局网站官网
  • 网站服务类型有哪些新闻联播直播 今天
  • 南通网站开发招聘云南建投第五建设有限公司网站
  • 招商网站搭建费用做免费网站安全吗
  • 网站配色方法wordpress tag=
  • vue做网站对seowordpress回复查看插件