You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用getJSON解析谷歌字体并实现分类下拉切换加载字体

嘿,我来帮你搞定这两个谷歌字体相关的问题,一步步来:

1. 如何使用getJSON解析并列出谷歌字体?

你可以通过谷歌字体的公开API获取字体数据,再用jQuery的getJSON方法请求并解析。具体实现如下:

首先,你需要去谷歌云平台申请一个API密钥(免费额度足够个人使用),然后用下面的代码请求数据并生成字体列表:

// 调用谷歌字体API,替换成你的API密钥
$.getJSON('https://www.googleapis.com/webfonts/v1/webfonts?key=你的API密钥', function(response) {
  // response.items 是包含所有字体信息的数组
  const fontListContainer = $('#font-list'); // 页面上预先准备好<ul id="font-list"></ul>

  // 遍历每个字体,生成带预览的列表项
  response.items.forEach(font => {
    const listItem = $('<li></li>')
      .text(font.family)
      .css('font-family', font.family); // 直接用字体本身渲染预览
    fontListContainer.append(listItem);
  });
});

这段代码会把所有谷歌字体的名称列出来,并且每个列表项都会用对应字体显示,直观展示字体样式。

2. 实现字体分类下拉框切换加载对应字体的功能

既然你已经拉取了全部字体数据,接下来只需要先按分类整理数据,再绑定下拉框的切换事件即可。

第一步:整理字体分类数据

先把所有字体按category属性分组,方便后续按分类加载:

// 假设你已经把拉取到的所有字体存在了allFonts变量里
const fontCategoryMap = {};
allFonts.forEach(font => {
  const category = font.category;
  // 如果分类不存在,先创建空数组
  if (!fontCategoryMap[category]) {
    fontCategoryMap[category] = [];
  }
  fontCategoryMap[category].push(font.family);
});

// 给下拉框填充分类选项
const categorySelect = $('#font-category-select'); // 页面上的<select id="font-category-select"></select>
Object.keys(fontCategoryMap).forEach(category => {
  const option = $('<option></option>')
    .val(category)
    .text(category.charAt(0).toUpperCase() + category.slice(1)); // 首字母大写优化显示
  categorySelect.append(option);
});

第二步:实现change_font_group切换函数

推荐用谷歌官方的Web Font Loader来加载字体,它能提供加载状态回调,方便做交互反馈:

function change_font_group() {
  const selectedCategory = $(this).val();
  const targetFonts = fontCategoryMap[selectedCategory];

  // 用Web Font Loader加载字体(先确保页面引入了这个库:<script src="https://ajax.googleapis.com/ajax/libs/webfont/1.6.26/webfont.js"></script>)
  WebFont.load({
    google: {
      families: targetFonts
    },
    active: function() {
      // 字体加载完成后,可更新预览区域
      const previewArea = $('#font-preview');
      previewArea.empty();
      targetFonts.forEach(font => {
        const previewItem = $('<div></div>')
          .text(`${font} 这是一段预览文本`)
          .css('font-family', font);
        previewArea.append(previewItem);
      });
      console.log(`分类「${selectedCategory}」的字体已加载完成`);
    },
    inactive: function() {
      console.log(`分类「${selectedCategory}」的字体加载失败,请检查网络`);
    }
  });

  // 如果你不想用Web Font Loader,也可以动态创建link标签加载(无状态回调)
  // $('link[data-font-category]').remove(); // 先清空之前加载的字体
  // targetFonts.forEach(font => {
  //   const fontUrl = `https://fonts.googleapis.com/css2?family=${encodeURIComponent(font)}`;
  //   const link = $('<link>')
  //     .attr('rel', 'stylesheet')
  //     .attr('href', fontUrl)
  //     .attr('data-font-category', selectedCategory);
  //   $('head').append(link);
  // });
}

// 给下拉框绑定change事件
$('#font-category-select').on('change', change_font_group);

这样当你切换下拉框的分类选项时,就会自动加载对应分类的所有字体,并且可以在加载完成后展示字体预览。

内容的提问来源于stack exchange,提问作者Device Developer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:05:22