vue2手机APP项目中,加入开屏广告或者闪屏广告

本文介绍了在Vue2手机应用中如何实现开屏广告的功能。通过在index.html中利用定位技术设置广告,实现启动时展示广告的效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一般项目里,有的会在启动的时候加开屏广告或者闪屏广告。我们是在index.html通过定位来做的。如下:

<style media="screen">
  #entry {
    width: 100%;
    height: 100%;
    z-index: 200;
    position: relative;
  }
  #entryAdv {
    display: none;
  }
  #entryTim {
    position: fixed;
    width: 2.2rem;
    line-height: 0.68rem;
    font-size: 0.32rem;
    z-index: 400;
    text-align: center;
    border-radius: 2rem;
    top: 0.5rem;
    right: 0.5rem;
    border: 1px solid #ccc;
  }
</style>
<body>
<!-- 开屏广告 -->
<section class="adv" id="entryAdv">
  <img id="entry">
  <p id="entryTim"></p>
</section>
<!-- 入口元素 -->
<section id="app"></section>
</body>
然后我们需要单独写一份js文件,跟main.js是同级目录的,具体代码如下:
import api from './fetch/api'
import store from './store/index'
// 修改开屏广告图片尺寸
let advWidth = document.documentElement.clientWidth;
let advHeight = document.documentElement.clientHeight;
let entryEl = document.getElementById('entry');
entryEl.style.widht = advWidth + 'px';
entryEl.style.height = advHeight + 'px';
let queryURL = window.location.href.split('?')[1];
// 判断是否为分享页面
if (queryURL) {
  let queryArr = queryURL.split('&');
  let query = {};
  for (let i = 0; i < queryArr.length; 
<think>嗯,用户问的是Vue3中ref和reactive的实现原理是否相同,以及各自的原理是什么。我需要先回忆一下Vue3的响应式系统是怎么工作的。Vue3主要用Proxy来实现响应式,但ref和reactive可能有所不同。 首先,reactive是用于对象类型的响应式转换,它确实基于Proxy。当用reactive包裹一个对象时,Vue会创建一个Proxy来拦截对对象属性的访问和修改,这样就可以跟踪依赖和触发更新。对于基本类型,比如字符串、数字,reactive不适用,这时候就需要用ref。 而ref可以处理基本类型和对象。对于基本类型,ref内部会用一个对象来包装值,这个对象有一个value属性。当访问ref的value时,会触发getter,收集依赖;修改value时,触发setter,通知更新。如果ref包裹的是对象,实际上内部会调用reactive来转换这个对象,所以这种情况下ref的value属性是一个Proxy。 所以两者的实现原理不同,但ref在处理对象时依赖了reactive的Proxy机制。可能用户会混淆这两者的使用场景,比如为什么有时候需要用.value,有时候不需要。另外,用户可能想知道为什么需要两种不同的API,而不是统一使用其中一个。 需要明确回答它们的实现差异,并给出示例代码。比如,展示reactive处理对象,而ref处理基本类型,以及ref处理对象时内部使用reactive的情况。然后,相关问题可以涉及使用场景、.value的必要性、性能差异以及如何选择两者等。</think><< Vue3中的`ref`和`ref`和`reactive`的实现原理**不完全相同**,虽然它们都基于响应式系统,但底层机制有明显差异。 ### 1. `reactive`的实现原理 - **核心机制**:基于ES6的`Proxy`实现,用于**对象类型**的响应式转换。 - **工作流程**: 1. 调用`reactive(obj)`时,会为`obj`创建一个`Proxy`代理对象。 2. `Proxy`会拦截所有对对象属性的操作(`get`、`set`、`deleteProperty`等)。 3. 在`get`时收集依赖(通过`track`函数),在`set`时触发更新(通过`trigger`函数)。 - **示例代码**: ```javascript const obj = reactive({ count: 0 }); // 底层会生成类似如下的Proxy: const proxy = new Proxy(obj, { get(target, key, receiver) { track(target, key); // 依赖收集 return Reflect.get(target, key, receiver); }, set(target, key, value, receiver) { Reflect.set(target, key, value, receiver); trigger(target, key); // 触发更新 return true; } }); ``` ### 2. `ref`的实现原理 - **核心机制**:基于`RefImpl`类实现,主要用于**基本类型**(如`number`、`string`),也可用于对象。 - **工作流程**: 1. 调用`ref(value)`时,会创建一个`RefImpl`实例。 2. 如果传入的是对象,内部会调用`reactive`将其转换为响应式对象。 3. 通过`.value`属性访问时触发`get`,修改时触发`set`。 - **示例代码**: ```javascript const num = ref(0); // 底层实现类似: class RefImpl { constructor(value) { this._value = isObject(value) ? reactive(value) : value; } get value() { track(this, &#39;value&#39;); // 依赖收集 return this._value; } set value(newVal) { this._value = newVal; trigger(this, &#39;value&#39;); // 触发更新 } } ``` ### 关键区别总结 | 特性 | `reactive` | `ref` | |--------------------|---------------------------------|--------------------------------| | 适用类型 | 对象/数组 | 基本类型 + 对象 | | 访问方式 | 直接访问属性(`obj.key`) | 通过`.value`(`refValue.value`)| | 底层实现 | `Proxy` | `RefImpl`类 + 可能嵌套`Proxy` | ### 何时选择? - 使用`reactive`处理深层嵌套的对象/数组。 - 使用`ref`处理基本类型或需要明确控制`.value`的场景。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值