js实现iframe框架的面包屑功能

news2024/11/24 22:52:47

js实现iframe框架的面包屑功能

  • 什么是iframe框架
  • 什么是面包屑
  • 面包屑的js实现
    • 思路
    • 代码实现
    • 小结

什么是iframe框架

iFrame全称Inline Frame是HTML中的一个标签,用于在一个HTML文档中嵌入另一个HTML文档。iFrame框架可以将一个HTML文档嵌入到另一个HTML文档中的一个独立的窗口中,这个窗口可以独立于主窗口进行加载和渲染。

iFrame框架可以用于以下场景:

  1. 在一个页面中嵌入另一个页面,例如在一篇文章中嵌入一段视频。
  2. 在一个页面中嵌入一个广告,可以独立加载和渲染,不影响主页面的性能。
  3. 在一个页面中嵌入一个登录框,可以通过iFrame框架实现跨域登录。

iFrame框架可以通过设置iFrame标签的属性来实现不同的效果,例如设置iFrame的宽度和高度、设置iFrame的边框、设置iFrame的src属性来指定要嵌入的HTML文档等。但是需要注意的是,由于iFrame框架可以跨域加载其他网站的内容,所以在使用iFrame框架时需要注意安全问题。

另外iframe解决了一个问题
你比如说:一个项目你要写30个页面,需要来回跳转,而且每个页面的菜单栏都是一样的。简单来说就是30个页面有公共的html代码,css代码,js代码。你可以选择每个页面都复制粘贴一份,但是这样不会太过麻烦吗?
iframe就可以解决这个问题。这种情况情况下,30个页面公共部分的布局样式只需要写一遍即可,把这个作为iframe的框架。30个页面中不同的部分分别写不同的html文件,css样式,js代码。引入到这个框架中,就可以实现我们的预期目标。

如果有相同js,css,只需要放入一个公共的public.css / public.js,将公共文件路径引入html文件即可,但是公共的html应该怎么办呢?
这个时候iframe就显得很珍贵了,因为它实现了代码的重用
想成为一个高手,就要具备重用代码的能力。用同一个函数能办类似的事情,用同样的代码能最大程度的做更多的事,这就算是高手。


什么是面包屑

面包屑(Breadcrumbs)是网站或应用程序中的一种导航方式,通过显示用户当前所处页面的路径来帮助用户快速定位到自己所需的内容或页面。

通常面包屑以一种层级结构的形式展现,每一层级代表一个页面或分类,用户可以通过点击面包屑上的链接回到之前的页面或分类。
你比如说,一个面包屑可能是这样的:
首页 > 电视 > 智能电视 > 55英寸智能电视,这表示用户当前正在查看的是55英寸智能电视的页面,并告诉用户如何回到电视或首页。

面包屑的作用在于:

  1. 提供导航:面包屑可以告诉用户当前所处位置以及如何返回到之前的页面或分类,方便用户进行导航。
  2. 提高用户体验:面包屑可以让用户更快速地找到自己需要的内容,提高用户的访问体验。
  3. 提高网站可用性:面包屑可以让用户更好地理解网站的结构和组织,提高网站的可用性和易用性。

需要注意的是,面包屑应该尽可能简洁明了,不应该包含太多的层级,以免影响用户体验。同时,面包屑应该与网站的其他导航方式相结合,提供更全面的导航。

太常见了,举几个例子:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述


面包屑的js实现

思路

在 iframe 框架中,实现面包屑导航通常是由父窗口来维护和显示的。
我们主要以以下思路为主开发:

  1. 在父窗口中,定义一个数组来存储当前页面的路径信息,例如:var breadcrumb = ['首页', '分类', '电视'];
  2. 在父窗口中,为 iframe 的 onload 事件添加一个监听函数,用于在 iframe加载完成后更新面包屑导航。例如:iframe.onload = updateBreadcrumb;
  3. 在 updateBreadcrumb 函数中,获取 iframe 中当前页面的路径信息,例如:var path = iframe.contentWindow.location.pathname;
  4. 将当前页面的路径信息添加到面包屑导航数组中,例如:breadcrumb.push(path);
  5. 更新面包屑导航的显示内容。可以通过 jQuery 来操作 DOM 元素,将面包屑导航数组中的内容渲染到页面中。
  6. 当用户点击面包屑导航中的某个链接时,可以通过 JavaScript 来控制 iframe 的 src 属性,使其加载对应的页面。
  7. 在每个页面中,可以通过 JavaScript 向父窗口发送消息,告知父窗口当前页面的路径信息,以便更新面包屑导航。

总体来说,iframe 框架的面包屑导航流程与普通页面的面包屑导航类似,只是需要在父窗口中来维护和显示面包屑导航,而在子窗口中则需要向父窗口发送消息来更新面包屑导航。


代码实现

html

<div id="breadcrumb"></div>
<iframe id="myFrame" src="index.html"></iframe>

js

var breadcrumb = ['首页']; // 初始化面包屑导航数组
var breadcrumbEl = document.getElementById('breadcrumb'); // 获取面包屑导航的 DOM 元素
var myFrame = document.getElementById('myFrame'); // 获取 iframe 的 DOM 元素
// 监听 iframe 的 onload 事件,更新面包屑导航
myFrame.onload = function() {
  var path = myFrame.contentWindow.location.pathname; // 获取 iframe 中当前页面的路径信息
  breadcrumb.push(path); // 将当前页面的路径信息添加到面包屑导航数组中
  renderBreadcrumb(); // 更新面包屑导航的显示内容
};
// 渲染面包屑导航的显示内容
function renderBreadcrumb() {
  var html = '';
  for (var i = 0; i < breadcrumb.length; i++) {
    if (i === breadcrumb.length - 1) {
      html += '<span>' + breadcrumb[i] + '</span>'; // 最后一个元素不加链接
    } else {
      html += '<a href="#" οnclick="goToPage(' + i + ')">' + breadcrumb[i] + '</a> <span>/</span> ';
    }
  }
  breadcrumbEl.innerHTML = html;
}
// 点击面包屑导航中的链接时,切换到对应的页面
function goToPage(index) {
  breadcrumb = breadcrumb.slice(0, index + 1); // 截取面包屑导航数组,保留前 index + 1 个元素
  var path = breadcrumb[index];
  myFrame.src = path; // 切换 iframe 的 src 属性
}

小结

我们首先要定义了一个数组 breadcrumb 来存储当前页面的路径信息,然后通过 myFrame.onload 事件来监听 iframe 加载完成后的事件,并在事件处理函数中更新面包屑导航数组,并调用 renderBreadcrumb 函数来更新面包屑导航的显示内容。
在 renderBreadcrumb 函数中,我们通过遍历面包屑导航数组来生成对应的 HTML 代码,并将其渲染到页面中的 breadcrumbEl 元素中。
最后,我们定义了一个 goToPage 函数,用于响应面包屑导航中的链接点击事件。在该函数中,我们通过截取面包屑导航数组来保留前面的元素,并更新 iframe 的 src 属性,以切换到对应的页面。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/460272.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

后代选择器

知识点&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta http-equiv"X-UA-Compatible" content"IEedge"> <meta name"viewport" c…

深度学习入门到实践:相关基础概述

绪论 深度学习&#xff08;Deep Learning&#xff09;是近年来发展十分迅速的研究领域&#xff0c;并且在人工智能的很多子领域都取得了巨大的成功。从根源来讲&#xff0c;深度学习是机器学习的一个分支&#xff0c;是指一类问题以及解决这类问题的方法。     深度学习问题…

【Arduino SD卡和数据记录教程】

【Arduino SD卡和数据记录教程】 1. 前言2. 工作原理3. Arduino SD 卡模块代码4. Arduino SD卡数据记录1. 前言 在本Arduino教程中,我们将学习如何将SD卡模块与Arduino板一起使用。此外,结合DS3231实时时钟模块,我们将制作一个数据记录示例,将温度传感器的数据存储到SD卡中…

分布式消息队列Kafka(一)

一.kafka基础架构 &#xff08;1&#xff09;Producer&#xff1a;消息生产者&#xff0c;就是向 Kafka broker 发消息的客户端。 &#xff08;2&#xff09;Consumer&#xff1a;消息消费者&#xff0c;向 Kafka broker 取消息的客户端。 &#xff08;3&#xff09;Consumer…

每日一个小技巧:1分钟告诉你截图翻译软件哪个好用

随着互联网的发展&#xff0c;我们对各种语言文字的翻译需求越来越高。在翻译时&#xff0c;大家经常会遇到一些生词或专业术语&#xff0c;这时候我们就需要使用翻译软件来帮助理解。但是&#xff0c;有些时候大家需要翻译的内容并不是一段文本&#xff0c;而是一张图片或截图…

《前端bug齁逼多,真假开发说》2023/4/10-2023/4/18问题汇总

1 高德地图 运行抱错 INVALID_USER_SCODE 这里是错误信息对应原因 错误信息列表-参考手册-地图 JS API | 高德地图API 这里是高德地图api设置说明 准备-入门-教程-地图 JS API | 高德地图API 如果你自己能排查出错误 那不用看我的&#xff0c;如果都写的对还是抱错…

最常用的从A到Z的Linux命令,真的很好记,三分钟刷完!

Linux的命令行是一个非常强大的工具。如果你知道如何利用Linux命令&#xff0c;你可以轻松地在Linux系统中执行各种任务。在这篇文章中&#xff0c;我们将介绍从A到Z的Linux命令。 alias alias命令允许你为常用的命令设置一个短的别名&#xff0c;以节省时间和减少敲击。例如&…

界面开发框架Qt新手入门 - 自定义排序/筛选模型示例(一)

Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写&#xff0c;所有平台无差别运行&#xff0c;更提供了几乎所有开发过程中需要用到的工具。如今&#xff0c;Qt已被运用于超过70个行业、数千家企业&#xff0c;支持数百万设备及应用。 自定义排序/筛选模型…

IBL-镜面反射(LUT篇)

1. LUT需要求解什么 首先我们将镜面反射部分的积分分割为两个部分。 L o ( p , ω o ) ∫ Ω L i ( p , ω i ) d ω i ∗ ∫ Ω f r ( p , ω i , ω o ) n ⋅ ω i d ω i L_{o}\left(p, \omega_{o}\right)\int_{\Omega} L_{i}\left(p, \omega_{i}\right) d \omega_{i} * …

基于异常值鲁棒性问题的极限学习机的回归问题研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

外贸软件解决玩具行业管理难点,提升业务效率

在玩具外贸市场&#xff0c;中国显而易见是玩具的生产大国&#xff0c;但却不是玩具生产强国。与发达国家相比&#xff0c;我国玩具行业市场集中度较低&#xff0c;对于国外玩具采购商来说&#xff0c;他们对于采购费用都是相对固定的&#xff0c;连对采购的需求也不会有多少变…

解决在vue中使用elementUI自定义校验及点击提交不生效问题

前言&#xff1a; 本章讲述的主要是对身份证号码的校验 及 为何校验了但提交不生效问题。 拓展小知识&#xff1a; &#x1f340; 1、身份证号码&#xff08;二代18位身份证&#xff09;的含义&#xff1a; 1️⃣ 1-2位&#xff1a;代表所属省级政府的代码&#xff1b; 2️⃣ 3…

【前端】原型和原型链

最近面试的时候&#xff0c;面试官有问到这个&#xff0c;答得很简单&#xff0c;感觉了解得不深&#xff0c;下来之后自己又搜索了一下动手看了看相关的内容。 a. 每个函数都有prototype属性&#xff0c;称之为原型&#xff1b;因为这个属性的值有时候是一个对象&#xff0c;…

2023-04-04 2016天梯赛决赛练习题L2

7-11 互评成绩 学生互评作业的简单规则是这样定的&#xff1a;每个人的作业会被k个同学评审&#xff0c;得到k个成绩。系统需要去掉一个最高分和一个最低分&#xff0c;将剩下的分数取平均&#xff0c;就得到这个学生的最后成绩。本题就要求你编写这个互评系统的算分模块。 输…

JUC概述

1. JUC是什么&#xff1f; 在 Java 5.0 提供了 java.util.concurrent(简称JUC)包&#xff0c;在此包中增加了在并发编程中很常用的工具类。此包包括了几个小的、已标准化的可扩展框架&#xff0c;并提供一些功能实用的类&#xff0c;没有这些类&#xff0c;一些功能会很难实现或…

【JavaEE】SpringBoot配置文件的设置及其读取

目录 配置文件作用 配置文件注意事项 properties 用法 修改字符集 优缺点 yml 用法 优缺点 读取配置文件 使用 Value注解 读properties配置文件 读yml配置文件 使用 ConfigurationProperties 注解 读properties配置文件 读yml配置文件 配置文件作用 SpringBoot的…

MCMC采样

MCMC采样 MCMC 是一种随机的近似推断&#xff0c;其核心就是基于采样的随机近似方法蒙特卡洛方法。而近似推断中又可以分成两大类&#xff0c;即为确定性近似 (VI) 和随机近似 (MCMC)。我们需要从概率分布中取 个点&#xff0c;从而近似计算这个积分。常用采样方法有&#xff…

开关柜绝缘状态检测与故障诊断

摘要:电力开关柜作为电力系统的关键设备广泛应用于输电配电网络&#xff0c;其运行可靠性直接影响着电力系统供电质量及安全性能。开关柜绝缘状态检测与故障诊断是及时维修、更换和预防绝缘故障的重要技术手段。在阐述开关柜绝缘状态评估的基础上&#xff0c;指出其内典型的局部…

Docker --- 基本操作、Dockerfile自定义镜像

一、Docker的基本操作 1.1、镜像操作 镜像名称 首先来看下镜像的名称组成&#xff1a; 镜名称一般分两部分组成&#xff1a;[repository]:[tag]。 在没有指定tag时&#xff0c;默认是latest&#xff0c;代表最新版本的镜像 如图&#xff1a; 这里的mysql就是repository&…

数据库课设--基于Python+MySQL的餐厅点餐系统(表的设计)

文章目录 一、系统需求分析二、系统设计1. 功能结构设计2、概念设计2.2.1 bill_food表E-R图2.2.2 bills表E-R图2.2.3 categories E-R图2.2.4 discounts表 E-R图2.2.5 emp表E-R图2.2.6 food 表E-R图2.2.7 member表E-R图2.2.8 member_point_bill表E-R图2.2.9 servers表E-R图2.2.1…