uni-app 从vue页面路由跳转到nvue页面 引入外部字体不生效

uni-app 从vue页面路由跳转到nvue页面 引入外部字体不生效

开发环境 版本号 项目创建方式
Windows Windows 10 19044.1645 HBuilderX
产品分类:uniapp/App

PC开发环境操作系统:Windows

HBuilderX类型:正式

HBuilderX版本号:3.4.7

手机系统:全部

手机厂商:vivo

页面类型:nvue

vue版本:vue2

打包方式:云端

项目创建方式:HBuilderX

App下载地址或H5网址:[https://github.com/wq0425/ttfDemo](https://github.com/wq0425/ttfDemo)

测试过的手机:vivo nexs

操作步骤:
https://github.com/wq0425/ttfDemo
预期结果:
vue路由跳转nvue后引入外部字体生效
实际结果:
vue路由跳转nvue后引入外部字体不生效
bug描述:
在项目中需要修改app字体,是个视频项目,vue页面路由跳转nvue页面,vue页面字体修改生效,但是跳转nvue页面后不生效,
[bug复现地址](https://github.com/wq0425/ttfDemo)

更多关于uni-app 从vue页面路由跳转到nvue页面 引入外部字体不生效的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

uni.loadFontFace nvue页面不支持 https://uniapp.dcloud.io/tutorial/nvue-api.html#dom

更多关于uni-app 从vue页面路由跳转到nvue页面 引入外部字体不生效的实战教程也可以访问 https://www.itying.com/category-93-b0.html


这个对的NVUE不支持公共页面引入的字体 插件引入方式 PluginName = uni.requireNativePlugin(PluginName)

在 uni-app 中,从 Vue 页面跳转到 nvue 页面时,引入外部字体不生效的问题可能是由于 nvue 页面的渲染机制与 Vue 页面不同所导致的。nvue 页面使用的是原生渲染,而 Vue 页面使用的是 WebView 渲染,因此它们的样式和资源加载方式有所不同。

以下是一些可能的解决方案:

1. 在 nvue 页面中引入字体

确保在 nvue 页面中正确引入了字体文件。你可以在 nvue 页面的 <style> 标签中通过 @font-face 引入字体。

<style>
@font-face {
  font-family: 'CustomFont';
  src: url('/static/fonts/CustomFont.ttf');
}

.text {
  font-family: 'CustomFont';
}
</style>

2. 使用 uni.loadFontFace 动态加载字体

uni-app 提供了 uni.loadFontFace API,可以在页面加载时动态加载字体。你可以在 nvue 页面的 onLoad 生命周期中调用这个 API。

export default {
  onLoad() {
    uni.loadFontFace({
      family: 'CustomFont',
      source: 'url("/static/fonts/CustomFont.ttf")',
      success: () => {
        console.log('字体加载成功');
      },
      fail: (err) => {
        console.log('字体加载失败', err);
      }
    });
  }
}

3. 确保字体文件路径正确

确保字体文件的路径是正确的,并且字体文件已经正确放置在项目的 static 目录下。路径应该是相对于 static 目录的。

4. 检查字体文件格式

确保字体文件的格式是 nvue 页面支持的格式。通常,ttf 和 otf 格式的字体文件在 nvue 页面中是可以正常使用的。

5. 使用 weex 的原生样式

nvue 页面使用的是 weex 的原生样式,因此某些 CSS 属性可能不支持。确保你使用的 CSS 属性在 nvue 页面中是有效的。

6. 检查字体是否被正确应用

在 nvue 页面中,确保你正确地将字体应用到了元素上。例如:

<template>
  <view class="text">Hello, World!</view>
</template>

<style>
.text {
  font-family: 'CustomFont';
}
</style>

7. 使用 uni-app 的全局样式

如果你希望在多个页面中使用相同的字体,可以将字体定义在 App.vue 的全局样式中,这样所有页面都可以使用这个字体。

/* App.vue */
<style>
@font-face {
  font-family: 'CustomFont';
  src: url('/static/fonts/CustomFont.ttf');
}
</style>

然后在 nvue 页面中直接使用这个字体:

<template>
  <view class="text">Hello, World!</view>
</template>

<style>
.text {
  font-family: 'CustomFont';
}
</style>

8. 检查 nvue 页面的渲染模式

nvue 页面有两种渲染模式:weex 和 uni-app。确保你使用的是 uni-app 的渲染模式,因为 weex 模式可能不支持某些特性。

{
  "pages": [
    {
      "path": "pages/nvuePage",
      "style": {
        "navigationBarTitleText": "nvuePage",
        "renderer": "native"
      }
    }
  ]
}
回到顶部