前端开发入门指南Day10: BOM:浏览器窗口的控制(Location对象、定时器函数、本地存储)

你有没有想过,当我们使用浏览器时,是如何控制窗口大小、获取屏幕信息、存储数据的呢?今天,让我们一起探索浏览器对象模型(Browser Object Model,简称BOM)的世界!

一、认识BOM:浏览器的"指挥中心" 🎮

BOM就像是浏览器的控制面板,通过它,我们可以操控浏览器窗口、获取各种信息,就像驾驶舱里的各种仪表和控制器。window对象是BOM中最核心的对象,它代表了浏览器窗口。

// window对象是全局对象,下面两种写法是等价的
window.document.title = "新标题";
document.title = "新标题";

// 获取窗口的尺寸信息
console.log("窗口内部宽度:", window.innerWidth);
console.log("窗口内部高度:", window.innerHeight);

// 获取屏幕信息
console.log("屏幕宽度:", screen.width);
console.log("屏幕高度:", screen.height);

二、浏览器的"导航仪":Location对象 🧭

location对象就像浏览器的GPS系统,它告诉我们当前页面的地址信息,并且可以帮助我们进行页面跳转。

// 获取当前页面的URL信息
console.log("完整URL:", location.href);
console.log("域名:", location.hostname);
console.log("路径:", location.pathname);

// 页面跳转
function goToHomePage() {
    location.href = "index.html";  // 跳转到首页
}

function refreshPage() {
    location.reload();  // 刷新页面
}

三、时间管理:定时器 ⏰

定时器就像是浏览器的闹钟系统,可以帮我们在特定时间执行任务。

// 1. 一次性定时器
function showGreeting() {
    console.log("欢迎来到我的网站!");
}
// 3秒后显示欢迎信息
const timeoutId = setTimeout(showGreeting, 3000);

// 取消定时器
clearTimeout(timeoutId);

// 2. 循环定时器
function updateClock() {
    const now = new Date();
    console.log("当前时间:", now.toLocaleTimeString());
}
// 每秒更新一次时间
const intervalId = setInterval(updateClock, 1000);

// 停止更新
clearInterval(intervalId);
 

四、数据管理员:本地存储 💾

localStorage和sessionStorage就像浏览器的记事本,可以帮我们存储一些数据。

// 1. localStorage:永久存储
// 存储数据
localStorage.setItem("username", "张三");
localStorage.setItem("theme", "dark");

// 读取数据
const username = localStorage.getItem("username");
console.log("用户名是:", username);

// 删除特定数据
localStorage.removeItem("theme");

// 清空所有数据
localStorage.clear();

// 2. sessionStorage:临时存储(关闭标签页就消失)
sessionStorage.setItem("tempData", "一些临时数据");

五、实用小例子 🌟

1. 自动保存的笔记本

const notepad = {
    // 保存笔记
    saveNote(content) {
        localStorage.setItem("myNote", content);
        console.log("笔记已保存!");
    },
    
    // 加载笔记
    loadNote() {
        return localStorage.getItem("myNote") || "";
    }
};

// 使用示例
const textarea = document.querySelector("#noteInput");
textarea.value = notepad.loadNote();  // 加载已保存的笔记

// 当用户输入时自动保存
textarea.addEventListener("input", function() {
    notepad.saveNote(this.value);
});

2. 简单的主题切换器

const themeManager = {
    setTheme(theme) {
        document.body.className = theme;
        localStorage.setItem("theme", theme);
    },
    
    loadTheme() {
        const savedTheme = localStorage.getItem("theme") || "light";
        this.setTheme(savedTheme);
    }
};

// 页面加载时恢复主题
themeManager.loadTheme();

六、浏览器事件 📣

// 1. 页面加载完成事件
window.addEventListener("load", function() {
    console.log("页面完全加载完成!");
});

// 2. 窗口大小改变事件
window.addEventListener("resize", function() {
    console.log("窗口大小改变了!");
    console.log("新的宽度:", window.innerWidth);
});

// 3. 页面滚动事件
window.addEventListener("scroll", function() {
    console.log("页面滚动了!");
    console.log("滚动位置:", window.scrollY);
});

小贴士 💡

  1. localStorage 中只能存储字符串,存储对象时需要使用 JSON.stringify()
  2. 注意清理不再使用的定时器,避免内存泄漏
  3. 页面跳转时最好使用相对路径,更容易维护
  4. 操作BOM时要考虑浏览器兼容性

这些就是BOM的基础内容!通过这些工具,我们可以让网页变得更加智能和人性化。欢迎留下评论共同讨论!

### Vue3 中通过编程式路由传递参数的方法 在 Vue3 中,可以通过 `router.push()` 方法实现编程式的页面跳转,并且可以利用路由参数或查询参数来传递数据。以下是详细的说明和代码示例。 #### 路由参数 (params) 如果需要通过路径中的动态部分传递参数,可以在定义路由时设置动态段(如 `/user/:id`),并通过对象形式指定参数: ```javascript // 定义路由规则 const routes = [ { path: &#39;/user/:id&#39;, component: UserDetail } ]; // 创建路由器实例 const router = createRouter({ history: createWebHistory(), routes, }); // 在组件中使用编程式导航传参 function navigateToUser(id) { router.push({ name: &#39;user&#39;, params: { id } }); // 假设 route.name 是 &#39;user&#39; } ``` 上述代码展示了如何通过 `params` 参数传递数据[^1]。目标组件可以通过 `this.$route.params.id` 获取传递的数据[^2]。 --- #### 查询参数 (query) 另一种方式是通过 URL 的查询字符串传递参数。这种方式不会改变路由结构,而是附加在 URL 后面作为键值对存在: ```javascript // 编程式导航带查询参数 function navigateWithQuery() { const queryParams = { filter: &#39;all&#39;, page: 2 }; router.push({ path: &#39;/search&#39;, query: queryParams }); } // 在目标组件中读取查询参数 console.log(this.$route.query.filter); // 输出 &#39;all&#39; console.log(this.$route.query.page); // 输出 &#39;2&#39; ``` 此方法适用于不需要更改路由名称但需携带额外信息的情况[^3]。 --- #### 综合示例:列表页跳转至详情页 假设有一个产品列表页面,点击某个项目会跳转到对应的详情页面并显示其 ID 和其他信息: ```html <template> <div> <ul> <li v-for="item in items" :key="item.id"> <!-- 使用 @click 实现编程式导航 --> <button @click="goToDetail(item.id)">查看 {{ item.name }}</button> </li> </ul> </div> </template> <script> export default { data() { return { items: [ { id: 1, name: &#39;Product A&#39; }, { id: 2, name: &#39;Product B&#39; }, ], }; }, methods: { goToDetail(id) { this.$router.push({ name: &#39;product-detail&#39;, params: { id } }); }, }, }; </script> ``` 在目标详情页组件中接收参数: ```javascript export default { mounted() { console.log(&#39;当前产品的ID:&#39;, this.$route.params.id); }, }; ``` 以上代码实现了从列表页到详情页的跳转以及参数传递功能。 --- ### 总结 无论是通过路由参数还是查询参数,在 Vue3 中都可以方便地完成跨页面的数据传递。具体选择取决于实际需求——当需要保持清晰的 URL 结构时优先考虑路由参数;而仅用于临时状态管理则推荐查询参数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值