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

【UniApp】uniapp 中使用不同字体

CrazyPanda发表于:2023-12-21 22:46:39浏览:284次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运行比较慢是什么原因
随着移动互联网用户的不断增长,移动应用市场呈现出爆发式的增长态势。为了迎合这个趋势,许多开发者选择了跨平台开发技术,在多个平台发布应用,以便在更广泛的受众中推广自己的应用。UniApp就是其中的一种跨平台开发技术,它可以同时在iOS和Android平台上运行。然而,在使用UniApp开发应用的过程中,很多开发者都发现应用的运行速度太慢了。这是一个非常严重的问题,因为速度慢不仅会给用户带来不好的用户体验,而且也会影响应用的市场竞争力。所以,如何提高UniApp的运行速度成为了开发者们十分
发表于:2023-12-16 浏览:432 TAG:
【UniApp】UniApp原生讯飞语音插件-YL-SpeechRecognition
由于插件文档图片部分可能无法显示,可以移步到CSDN博客,查看完整文档:https://blog.csdn.net/baiyuliang2013/article/details/130925332插件说明:支持安卓IOS双端!新版本已由必须联系本人打离线包,升级为线上购买后自主导入sdk打包,更方便快捷!当然,您在使用时遇到问题依然可以联系本人QQ:453503875,微信:同qq。若您只需要安卓端,可使用:Uts版插件:https://ext.dcloud.net.cn/plugin?id=1
发表于:2023-12-07 浏览:350 TAG:
【UniApp】uniapp如何实现多端统一开发
Uniapp是一个基于vue.js的框架,可以实现一次开发,多端发布,包括了H5、小程序、App等多个平台。本文将介绍如何使用Uniapp实现多端统一开发,并附上代码示例。一、项目创建和配置在HBuilderX中创建Uniapp项目,选择需要开发的目标平台。在项目的manifest.json文件中配置App基本信息,比如包名、版本号等。配置项目的各平台的自定义配置,比如小程序的appid等。二、组件和样式的开发Uniapp支持使用vue.js的组件和样式进行开发,在不同平台上的样式和组
发表于:2023-12-24 浏览:286 TAG:
【UniApp】使用uniapp实现日历功能
使用uniapp实现日历功能随着移动互联网的发展,日历功能成为了许多APP和网站的必备组件之一。在uniapp这个跨平台开发框架中,我们可以很方便地实现日历功能,并且兼容多个平台,包括iOS、Android等。首先,我们需要用到uniapp的组件库中的日期选择器。uniapp提供了picker组件,其中mode属性可以设置为&quot;date&quot;来实现日期选择。具体代码如下:&lt;template&gt; &nbsp;&nbsp;&lt;view&gt; &nbsp;&amp;nb
发表于:2023-12-23 浏览:335 TAG:
【UniApp】Flutter和uniapp的区别:适用场景、生态系统和社区支持
随着移动应用开发领域的迅速发展,各种跨平台开发框架也应运而生。在这些框架中,Flutter和uniapp无疑是两个备受关注的热门选择。它们都具有跨平台开发的能力,但在适用场景、生态系统和社区支持等方面存在一些区别。首先,适用场景是选择开发框架的重要考虑因素之一。Flutter是Google推出的UI框架,使用Dart语言进行跨平台开发。它主要适用于开发高性能的移动应用程序,特别是那些对视觉效果和动画效果要求较高的应用。Flutter具有热重载功能,在开发过程中能够实时预览修改后的效果,提高开发效
发表于:2024-03-31 浏览:310 TAG:
【UniApp】UniApp实现支付宝小程序的开发与上线流程解析
UniApp是一款基于Vue.js框架的跨平台开发工具,能够快速实现一次编码,多端发布的效果。作为开发者,我们可以利用UniApp来实现支付宝小程序的开发,同时本文将对支付宝小程序开发与上线流程进行详细解析,并提供相应的代码示例供参考。一、UniApp与支付宝小程序开发环境搭建1.确保已安装好Node.js环境,如未安装,可前往Node.js官网下载并安装最新版本。2.在命令行中执行以下命令,安装全局Vue-cli脚手架工具:npm&nbsp;install&nbsp;-g&nbsp;
发表于:2023-12-26 浏览:357 TAG:
【UniApp】如何在uniapp中关闭webview
在使用uniapp开发时,经常会需要在应用中使用webview来加载外部网页或是展示其他内容。但是,有时候我们并不需要一直保持webview的打开状态,而是需要手动关闭。那么,本文将会介绍如何在uniapp中关闭webview。一、关闭当前页面在uniapp中,我们可以使用以下方法来关闭当前webview所在的页面:uni.navigateBack({ &nbsp;&nbsp;&nbsp;&nbsp;delta:&nbsp;1 });这个方法会返回到上一个页面,即关闭当前页面。二、关闭
发表于:2023-12-22 浏览:329 TAG:
【UniApp】uniapp引入腾讯云播放器
&nbsp; &nbsp; &nbsp; &nbsp; 随着科技的不断发展,人们对于视频媒体的需求和依赖也越来越大。在移动端中,很多应用都需要视频播放功能,然而在实现视频播放时又会面临着很多问题。为了解决这些问题,互联网公司们纷纷推出了自己的视频播放器,腾讯云也不例外。腾讯云播放器是一款流畅、稳定、易于使用的播放器,不仅支持多种格式的视频播放,而且支持高度定制化,可以满足开发者的个性化需求。而本文主要讲述如何在uniapp框架中引入腾讯云播放器。1、注册腾讯云账号在引入腾讯云播放器之前,
发表于:2023-12-25 浏览:318 TAG:
【UniApp】uniapp怎么去除子页面的左侧返回
随着移动设备在人们生活中使用越来越广泛,移动应用的需求也愈发增长。近年来,由于跨端技术的发展,多端混合应用开发成为了主流,uniapp就是其中的佼佼者。然而,在开发uniapp应用时,我们可能会遇到一些问题,比如如何去除子页面的左侧返回按钮。在uniapp中,每当我们打开一个新的页面,都会在左上角出现一个返回按钮,点击该按钮即可返回到上一页。但是,如果我们在某些场景中不希望显示这个返回按钮,就需要去除它。下面,我将介绍两种方法来实现这一功能。一、使用导航栏组件uniapp提供了一个导航
发表于:2023-12-25 浏览:301 TAG:
【UniApp】UniApp实现动态效果与动画展示的设计与开发方法
UniApp是一款基于Vue.js开发的跨平台应用框架,可以将Vue代码转化为不同平台的原生代码,比如小程序、App和H5等。它提供了丰富的组件和插件,可以帮助开发者快速构建功能丰富的应用。本文将介绍如何使用UniApp实现动态效果与动画展示的设计与开发方法,并附上相应的代码示例。使用CSS动画UniApp支持使用CSS3的transition和animation属性来实现动画效果。可以通过在组件的style属性中定义相应的动画样式来实现。示例代码:&lt;template&gt; &amp;
发表于:2023-12-12 浏览:343 TAG: