您的当前位置:首页>全部文章>文章详情

【UniApp】uniapp 中使用不同字体

CrazyPanda发表于:2023-12-21 22:46:39浏览:292次TAG:

展示效果 : uniapp 多种字体的显示

  • H5网页

  • Android

  • IOS

uni.loadFontFace({
  family: 'Bitstream Vera Serif Bold',
  source: 'url("https://sungd.github.io/Pacifico.ttf")',
  success() {
      console.log('success')
  }
})

(官方)注意:

  1. 引入中文字体,体积过大时会发生错误,建议抽离出部分中文,减少体积,或者用图片替代

  2. 微信小程序端只支持网络字体字体链接必须是https。App支持网络或本地的字体(本地字体需使用平台绝对路径)。

  3. 微信小程序端字体链接必须是同源下的,或开启了cors支持,微信小程序的域名是servicewechat.com

  4. canvas等原生组件不支持使用接口添加的字体

  5. 工具里提示 Faild to load font可以忽略

1.png1.png1.png

如果想在  App.vue 中初始化 字体 需要延迟 执行;暂时不知道为什么 猜测有可能 App.vue 执行到的时候 页面资源还没执行完毕 所以无法调用


<script>
  export default {
    onLaunch: function() {
      console.log('App Launch')
 
      setTimeout(() => {
        //本地 只支持 APP
        // uni.loadFontFace({
        //   family: 'font-test',
        //   // 本地字体路径需转换为平台绝对路径
        //   source: `url(${plus.io.convertLocalFileSystemURL('_www/static/Pacifico.ttf')})`,
        //   success() {
        //     console.log('success')
        //   },
        //   fail(e) {
        //     console.log('fail')
        //   }
        // })
        
        //远程 兼容 App H5
        const url = 'https://haciend-aassets-5gdqxjj2b8cb72d6-1302720239.tcloudbaseapp.com/Rabbit font.ttf'
        uni.loadFontFace({
          family: 'font-test',
          source: `url("${url}")`
        })
      }, 300)
 
 
 
    },
    onShow: function() {
      console.log('App Show')
    },
    onHide: function() {
      console.log('App Hide')
    }
  }
</script>
 
<style>
  /*每个页面公共css */
</style>


  • 顺便提一句 Android 手机设置    font-weight: 500; 无效的问题

1.png


我们来看段代码

    <view class="text-cn" style="font-weight: 300;">
      哦 我是 谁 我在那?font-weight: 300;
    </view>
    <view class="text-cn" style="font-weight: 400;">
      哦 我是 谁 我在那?font-weight: 400;
    </view>
    <view class="text-cn" style="font-weight: 500;">
      哦 我是 谁 我在那?font-weight: 500;
    </view>
    <view class="text-cn" style="font-weight: 600;">
      哦 我是 谁 我在那?font-weight: 600;
    </view>
    <view class="text-cn" style="font-weight: 700;">
      哦 我是 谁 我在那?font-weight: 700;
    </view>
    <view class="text-cn" style="font-weight: 800;">
      哦 我是 谁 我在那?font-weight: 800;
    </view>
    <view class="text-cn" style="font-weight: 900;">
      哦 我是 谁 我在那?font-weight: 900;
    </view>
    <view class="text-cn" style="font-weight: normal;">
      哦 我是 谁 我在那?font-weight: normal;
    </view>
    <view class="text-cn" style="font-weight: bold;">
      哦 我是 谁 我在那?font-weight: bold;
    </view>

1.png1.png1.png


所以呢 实际上 在uniapp  中只支持 两种加粗;在实际生产环境中 建议使用两档:

  • style="font-weight: normal;"

  • style="font-weight: bold;"



page.vue

<template>
  <view class="content">
    <view class="text-area">
      <text class="title">{{title}}</text>
    </view>
    <view class="text-en">
      who am i ?
    </view>
    <view>loadFontFaceFromWeb</view>
    <button @click="loadFontFaceFromWeb">从网络加载字体</button>
    <!-- #ifdef APP-PLUS -->
    <!-- 从本地加载字体 -->
    <view>loadFontFaceFromLocal</view>
    <button @click="loadFontFaceFromLocal">从本地加载字体</button>
    <view>loadFontFaceFromCache</view>
    <button @click="loadFontFaceFromCache">从网络加载字体并缓存</button>
    <!-- #endif -->
    <view class="text-cn">
      哦 我是 谁 我在那?
    </view>
 
  </view>
</template>
 
<script>
  //const url = 'https://sungd.github.io/Pacifico.ttf'
  const url = 'https://haciend-aassets-5gdqxjj2b8cb72d6-1302720239.tcloudbaseapp.com/Rabbit font.ttf'
  export default {
    data() {
      return {
        title: 'Hello'
      }
    },
    onLoad() {
 
    },
    methods: {
      loadFontFaceFromWeb() {
        uni.loadFontFace({
          family: 'font-test',
          source: `url("${url}")`
        })
      },
      // #ifdef APP-PLUS
      loadFontFaceFromLocal() {
        uni.loadFontFace({
          family: 'font-test',
          // 本地字体路径需转换为平台绝对路径
          source: `url(${plus.io.convertLocalFileSystemURL('_www/static/Pacifico.ttf')})`,
          success() {
            console.log('success')
          },
          fail(e) {
            console.log('fail')
          }
        })
      },
      async loadFontFaceFromCache() {
        let tempFilePath
        const savedFilePath = uni.getStorageSync('Pacifico')
        const [error, res] = await uni.getSavedFileList()
        if (!error) {
          const fileList = res.fileList
          const file = fileList.find(file => file.filePath === savedFilePath)
          if (file) {
            tempFilePath = file.filePath
          }
        }
        if (!tempFilePath) {
          const [error, res] = await uni.downloadFile({
            url,
          })
          if (!error) {
            tempFilePath = res.tempFilePath
            uni.saveFile({
              tempFilePath,
              success(res) {
                uni.setStorage({
                  key: 'Pacifico',
                  data: res.savedFilePath
                })
              }
            })
          } else {
            console.log('下载失败')
            return
          }
        } else {
          console.log('使用缓存资源,跳过下载步骤')
        }
        uni.loadFontFace({
          family: 'font-test',
          source: `url("${plus.io.convertLocalFileSystemURL(tempFilePath)}")`
        })
      }
      // #endif
    }
  }
</script>
 
<style>
  .content {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    font-family: font-test;
  }
 
  .text-area {
    display: flex;
    justify-content: center;
  }
 
  .title {
    font-size: 36rpx;
    color: #8f8f94;
  }
 
  .text-cn {
    color: #ff0004;
    font-family: 'Courier New', Courier, monospace;
  }
 
  .text-en {
    color: #1755ff;
    /* font-family: ""; */
    font-family: Arial, Helvetica, sans-serif;
  }
</style>

示例工程下载


2021年5月补充:

前几天做了一个PC版的 网页;发现其实我们大多时候 不用引入外部字体!  应为各个操作系统其实 是有类似的字体的;

比方下面这句代码:可以在 window 平台 和 Mac  得到 基本一样的显示效果!, 就是应为 在不同平台找到了 对应的字体

font-family: Helvetica, arial, "Microsoft YaHei", freesans, clean, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol";


生僻字 字体剔除:

 生僻字字体剔除icon-default.png?t=N5K3https://blog.csdn.net/nicepainkiller/article/details/127887100?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168802707216800182755863%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=168802707216800182755863&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-127887100-null-null.268^v1^koosearch&utm_term=%E5%AD%97%E4%BD%93&spm=1018.2226.3001.4450

猜你喜欢

【UniApp】Uniapp怎么动态更改tabbar
Uniapp是一款跨端开发框架,可以同时开发出H5、小程序、app等多个平台的应用,是非常实用的开发工具。其中,tabbar是作为底部导航栏来展示多个页面的重要控件之一。在开发过程中,有时需要根据不同的业务需求动态更改tabbar,本文将介绍如何在Uniapp中实现动态更改tabbar的方法。一、tabbar的基本使用及结构在Uniapp中使用tabbar,需要在pages.json文件中设置底部导航栏的样式和页面路径。示例代码如下:&quot;tabBar&quot;:&nbsp;{
发表于:2023-12-25 浏览:475 TAG:
【UniApp】如何在uniapp中使用表单验证技术实现输入校验
如何在uniapp中使用表单验证技术实现输入校验作为一种基于Vue.js的跨平台应用开发框架,UniApp可以开发同时运行在多个平台的应用程序,其支持使用表单验证技术来实现输入校验。本文将介绍在UniApp中如何使用表单验证技术来实现输入校验,并提供具体的代码示例。表单验证是一种常见的前端开发技术,用于确保用户输入的数据符合相应的规则和要求。在UniApp中实现表单验证可以通过使用Vue.js提供的指令和事件处理机制来完成。下面将结合具体示例来介绍如何在UniApp中实现表单输入校验。
发表于:2023-12-11 浏览:346 TAG:
【UniApp】uniapp如何实现多端统一开发
Uniapp是一个基于vue.js的框架,可以实现一次开发,多端发布,包括了H5、小程序、App等多个平台。本文将介绍如何使用Uniapp实现多端统一开发,并附上代码示例。一、项目创建和配置在HBuilderX中创建Uniapp项目,选择需要开发的目标平台。在项目的manifest.json文件中配置App基本信息,比如包名、版本号等。配置项目的各平台的自定义配置,比如小程序的appid等。二、组件和样式的开发Uniapp支持使用vue.js的组件和样式进行开发,在不同平台上的样式和组
发表于:2023-12-24 浏览:291 TAG:
【UniApp】如何在uniapp中实现图片上传和预览
如何在uniapp中实现图片上传和预览在现代社交网络和电子商务应用中,图片上传和预览功能是非常常见的需求。本文将介绍如何在uniapp中实现图片上传和预览的功能,并给出具体的代码示例。一、图片上传功能的实现在uniapp项目中,首先需要在页面中添加一个图片上传组件,如下所示:&lt;template&gt; &nbsp;&nbsp;&lt;view&gt; &nbsp;&nbsp;&nbsp;&nbsp;&lt;image&nbsp;v-for=&quot;(item,&nbsp;in
发表于:2023-12-11 浏览:421 TAG:
【UniApp】uniapp的标题怎么动态修改
Uniapp是一个基于Vue.js框架的跨平台开发工具,它可以将一个项目一次性编译成多个平台的应用程序,同时还提供了一些独特的功能,如动态修改标题等。在Uniapp中,我们可以很容易地实现动态修改标题的功能,具体方法如下:首先,在Vue组件中,我们可以使用mounted函数来获取到当前的页面实例,然后使用$refs属性来获取到头部组件中的标题组件,接着我们就可以使用this.$refs.title对象来对标题进行修改。示例代码如下:mounted()&nbsp;{ &nbsp;&amp;nbs
发表于:2023-12-25 浏览:360 TAG:
【UniApp】uniapp怎么隐藏导航
Uniapp是一种基于Vue.js开发的跨平台应用开发框架,它支持将一个应用打包成多个平台(如iOS、Android、H5等)。在开发Uniapp应用时,我们需要经常操作一些导航相关的功能,如导航栏、底部栏等的显示和隐藏。本文将介绍在Uniapp中如何实现隐藏导航的功能。在pages.json中配置导航栏先来看一下Uniapp中如何配置导航栏。在Uniapp中,我们可以通过pages.json文件来进行页面的配置。举个例子,在pages.json中如下配置:{ &nbsp;&nbsp;
发表于:2023-12-22 浏览:338 TAG:
【UniApp】利用uniapp实现音频播放功能
利用uniapp实现音频播放功能随着移动互联网的发展,音频播放功能成为了许多应用必不可少的功能之一。而利用uniapp可以方便地实现音频播放功能,而且具有跨平台的特点,可以在不同的移动终端上运行。在进行uniapp开发之前,我们需要先准备好音频资源文件。在本文中,我们将使用一个名为&quot;music.mp3&quot;的音频文件作为示例。首先,我们需要在uniapp的项目中创建一个音频播放页面。在pages文件夹下,新建一个名为&quot;audio&quot;的文件夹,并在该文件
发表于:2023-12-09 浏览:649 TAG:
【UniApp】uniapp实现如何使用JSBridge实现与原生交互
uniapp实现如何使用JSBridge实现与原生交互,需要具体代码示例一、背景介绍在移动应用开发中,有时需要与原生环境进行交互,比如调用原生的一些功能或获取原生的一些数据。uniapp作为一种跨平台的移动应用开发框架,提供了一种方便的方式来实现与原生交互,即使用JSBridge进行通信。JSBridge是一种前端与移动原生端进行交互的技术方案,通过在前端和原生端分别实现一个桥梁,使得前端可以调用原生的方法和获取原生的数据,同时原生也可以通过桥梁向前端发送消息。二、JSBridge的实
发表于:2023-12-24 浏览:516 TAG:
【UniApp】uniapp 中使用不同字体
官方文档&nbsp; uniapp&nbsp; 字体展示效果 : uniapp 多种字体的显示H5网页AndroidIOSuni.loadFontFace({ &nbsp;&nbsp;family:&nbsp;&#39;Bitstream&nbsp;Vera&nbsp;Serif&nbsp;Bold&#39;, &nbsp;&nbsp;source:&nbsp;&#39;url(&quot;https://sungd.github.io/Pacifico.ttf&quot;)&#39;, &amp;nb
发表于:2023-12-21 浏览:293 TAG:
【UniApp】Uniapp 本地插件安装教程
文章目录【Uniapp】Uniapp 本地插件安装教程1、创建插件目录2、把插件放到本地插件目录下3、配置插件4、制作自定义基座5、运行测试插件是否正常!【Uniapp】Uniapp 本地插件安装教程1、创建插件目录目录名称为 nativeplugins,这个是固定的 2、把插件放到本地插件目录下3、配置插件选择本地插件 勾选插件点确定检查插件是否安装完成4、制作自定义基座首先制作自动以基座,然后运行基座选择:自定义基座 5、运行测试插件是否正常!
发表于:2023-12-21 浏览:347 TAG: