JS读取目录下的所有图片/require动态加载图片/文字高亮

![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/58e35c3ba26b46cca0cf8543764950a1.png

<template class="aa">
  <div class="demo-image__lazy container">
    <div class="head">
      <div class="left-bar">
        <div><span>综合</span></div>
        <div><span>定位</span></div>
      </div>

      <div class="right-bar">
        <div>
          <el-radio-group
            v-model="value1"
            v-for="(item, index) in group1"
            :key="index"
          >
            <el-radio :label="index">{{ item }}</el-radio>
          </el-radio-group>
        </div>
        <div>
          <el-radio-group v-model="value2">
            <el-radio label="0">全部</el-radio>
            <el-radio label="1">战士</el-radio>
            <el-radio label="2">坦克</el-radio>
            <el-radio label="3">刺客</el-radio>
            <el-radio label="4">射手</el-radio>
            <el-radio label="5">法师</el-radio>
            <el-radio label="6">辅助</el-radio>
            <el-input
              class="p"
              v-model="name"
              placeholder="请输入要查找的英雄"
            ></el-input>
            <el-button style="margin-left: 10px" @click="search"
              >查询</el-button
            >
          </el-radio-group>
        </div>
      </div>
    </div>

    <div class="foot">
      <div class="imageBox" v-for="url in images" :key="url.path">
        <el-image
          class="imgSize"
          :src="require('@/assets/王者荣耀壁纸/' + url.path + '.jpg')"
          lazy
        >
        </el-image>
        <span v-html="url.heroName"></span>
      </div>
    </div>

    <!-- ----------------------------------------------------------------- -->
    <!-- <div class="demo-image__lazy image" v-for="url in images" :key="url">
      <el-image
        class=""
        :src="require('@/assets/王者荣耀壁纸/' + url.path + '.jpg')"
        lazy
      >
        <template #placeholder>
          <div class="custom-loading">加载中...</div>
        </template>
      </el-image>
      <span>{{ url.heroName }}</span>
    </div> -->
  </div>
</template>

<script>
//引入组件

import StudyM from "./components/StudyM.vue"
export default {
  name: "Test",
  components: {
    StudyM,
  },
  data() {
    return {
      images: [], // 图片集合
      cloneImages: [], // 克隆图片集合
      name: undefined, // 输入框查找英雄
      group1: ["本周免费", "新手推荐"],
      value1: 0,
      value2: "0",
      // prefixImg: "@/assets/王者荣耀壁纸/",
      // suffixImg: ".jpg",
    }
  },
  watch: {
    // 周免英雄/新手推荐
    value1(newValue) {
      this.getImage(newValue, "heroNumber")
    },
    // 英雄类型
    value2(newValue) {
      this.getImage(newValue, "heroType")
    },
    // 输入框查询
    name(newValue) {
      this.getImage(newValue, "search")
    },
  },
  created() {
    this.test()
  },

  methods: {
    // 图片处理
    test() {
      const controllerFiles = require.context(
        "@/assets/王者荣耀壁纸",
        true,
        /\.jpg$/
      )
      const controller = controllerFiles
        .keys()
        .reduce((controller, controllerPath) => {
          const controllerName = controllerPath.replace(/^\.\/(.*)\.\w+$/, "$1")
          var heroName = controllerName.split("-")
          var type = this.getRandomNumber(1, 6)
          /**
           * type 英雄类型
           * 1: 战士  2:坦克  3:刺客  4:射手 5:法师 6:辅助
           */
          var number = this.getRandomNumber(0, 1)
          /**
           * number 1: 本周免费  2:新手推荐
           */
          this.images.push({
            path: controllerName,
            heroName: heroName[1],
            type: type,
            number: number,
          })
        }, {})

      this.cloneImages = JSON.parse(JSON.stringify(this.images))
    },

    // 查询英雄
    getImage(param1, param2) {
      this.images = JSON.parse(JSON.stringify(this.cloneImages))
      if (param2 === "heroNumber") {
        this.images = this.images.filter((item) => item.number == param1)
      } else if (param2 === "heroType") {
        if (!(param1 == "0")) {
          //英雄类型的查询条件非"全部"
          this.images = this.images.filter((item) => item.type == param1)
        }
      } else if (param2 === "search") {
        this.images = this.images.filter((item) =>
          item.heroName.includes(param1)
        )
        this.images.forEach((item) => {
          // 搜索词高亮
          // i 匹配大小写  g匹配全部
          const reg = new RegExp(param1, "ig")
          item.heroName = item.heroName.replace(reg, (match) => {
            //替换对应字符
            return `<span style="color:red; font-weight: bold;">${match}</span>`
          })
        })
      }
    },

    search() {
      this.getImage(this.name, "search")
    },
    // 用随机数表示英雄类型
    getRandomNumber(min, max) {
      return Math.floor(Math.random() * (max - min + 1)) + min
    },
  },
}
</script>

<style lang="scss" scoped>
@mixin pub-css {
  display: flex;
  flex-direction: column;
  justify-content: space-around;
}

.custom-loading {
  color: #409eff;
  text-align: center;
  font-size: 14px;
}

.head {
  height: 80px;
  display: flex;
  flex-direction: row;
}

.left-bar {
  width: 80px;
  background: red;
  @include pub-css;
  align-items: center;
}

.right-bar {
  width: 100%;
  background: darkblue;
  @include pub-css;
  & div {
    margin-left: 10px;
  }
  & :nth-child(2) {
    .p {
      width: 160px;
      margin-left: 200px;
    }
  }
}

.foot {
  margin-top: 25px;
  display: grid;
  grid-template-columns: repeat(auto-fill, 95px);
  grid-template-rows: repeat(auto-fill, 95px);
  gap: 24px 35px;
  .imageBox {
    margin-left: 15px;
    text-align: center;
  }
  .imgSize {
    width: 95px;
    height: 95px;
    border: 1px solid;
    border-top-left-radius: 10px;
    border-bottom-right-radius: 10px;
  }
}
</style>

  问题:为什么require的变量跟字符串要分开写,而不能提前拼接到一起
  
  // webpack本身是一个预编译的打包工具,无法预测未知变量路径 不能require纯变量路径。
  // 如果提前拼接好路径会被当作静态资源处理
  require 是 node.js 中的一个方法:作用是 “用于引入模块、 JSON、或本地文件”。
  也就是说如果我们使用 require 来引入一个图片文件的话,那么 require 返回的就是用于引入的图片(npm 运行之后图片的编译路径)。 而如果使用字符串的话,那么则是一个 string 类型的固定字符串路径。
  我们知道,src 中引入的图片应该为图片的本身路径(相对路径或者绝对路径),而 vue 项目通过 webpack 的 devServer 运行之后,默认的 vue-cli 配置下,图片会被打包成 name.hash 的图片名,在这种情况下,如果我们使用固定的 字符串路径则无法找到该图片,所以需要使用 require 方法来返回 图片的编译路径。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/712164.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ARM32开发--PWM高级定时器

目录 文章目录 前言 目标 学习内容 需求 高级定时器通道互补输出 开发流程 通道配置 打开互补保护电路 完整代码 练习题 总结 前言 在嵌入式软件开发中&#xff0c;PWM&#xff08;脉冲宽度调制&#xff09;技术被广泛应用于控制各种电子设备的亮度、速度等参数。…

分离式网络变压器与传统网络变压器在电路设计中如何选择?

Hqst盈盛&#xff08;华强盛&#xff09;电子导读&#xff1a;今天分享的是&#xff1a;分离式网络变压器与传统网络变压器在电路设计中如何选择&#xff1f; 首先&#xff0c;我们要了解传统网络变压器和分离式网络变压器在设计上主要有以下不同点&#xff1a; 1、传统网络变…

Java GUI编程

引言 图形用户界面&#xff08;GUI&#xff09;编程是使应用程序与用户进行交互的重要部分。Java提供了多种用于GUI开发的工具和库&#xff0c;最常用的是Swing和AWT。本文将详细介绍Java GUI编程的基础知识&#xff0c;包括Swing和AWT框架、事件处理以及高级GUI组件的使用&…

【Pandas驯化-02】pd.read_csv读取中文出现error解决方法

【Pandas】驯化-02pd.read_csv读取中文出现error解决方法 本次修炼方法请往下查看 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合&#xff0c;智慧小天地&#xff01; &#x1f387; 相关内容文档获取 微信公众号 &…

剃头师傅不担心AI大模型 到底谁该担心?

到底学什么&#xff0c;不会被AI替代&#xff1f; 我家附近有一家美容店&#xff0c;已经开了20多年&#xff0c;店里的一位伙计硬是靠着自己的坚持从学徒熬成了门店的合伙人&#xff0c;所以现在去理发时&#xff0c;我都叫他“周董”。 这天&#xff0c;我问他&#xff0c;…

网络通信的两大支柱:TCP与UDP协议详解(非常详细)零基础入门到精通,收藏这一篇就够了

在构建现代互联网通信的基石中&#xff0c;TCP&#xff08;传输控制协议&#xff09;和UDP&#xff08;用户数据报协议&#xff09;起着至关重要的作用。本文将深入探讨两者的区别及应用场景。 1 TCP和UDP的共同点 传输层协议&#xff1a; TCP和UDP都是传输层协议&#xff…

联想电脑电池只能充到80%,就不在充电了,猛一看以为坏了,只是设置了养护模式。

现在电池管理模式有三种&#xff1a; 1&#xff09;常规 2&#xff09;养护 3&#xff09;快充 好久没有用联想的电脑了&#xff0c;猛一看&#xff0c;咱充到了80%不充了&#xff0c;难道电池是坏的&#xff1f;我们要如何设置才可以让其充电到100%呢&#xff1f; 右下角…

智慧监狱技术解决方案

1. **建设背景**&#xff1a;介绍了智慧监狱建设的战略部署&#xff0c;包括司法部提出的“数字法治、智慧司法”信息化体系建设&#xff0c;以及智慧监狱建设的总体目标、重点任务和实施步骤。 2. **建设需求**&#xff1a;分析了当前监狱系统存在的问题&#xff0c;如子系统…

后端中缓存的作用以及基于Spring框架演示实现缓存

缓存的作用及演示 现在我们使用的程序都是通过去数据库里拿数据然后展示的 长期对数据库进行数据访问 这样数据库的压力会越来越大 数据库扛不住了 创建了一个新的区域 程序访问去缓存 缓存区数据库 缓存里放数据 有效降低数据访问的压力 我们首先进行一个演示 为了演示…

大模型系列:Prompt提示工程常用技巧和实践

前言 Prompt提示语是使用大模型解决实际问题的最直接的方式&#xff0c;本篇介绍Prompt提示工程常用的技巧&#xff0c;包括Zero-Shot、Few-Shot、CoT思维链、Least-to-Most任务分解。 内容摘要 Prompt提示工程简述Prompt的一般结构介绍零样本提示Zero-Shot少样本提示Few-Sho…

企业化运维(3)_PHP、nginx结合php-fpm、memcache、openresty、goaccess日志可视化

###1.PHP源码编译### 解压PHP压缩包&#xff0c;切入PHP目录&#xff0c;进行configure-->make-->make installd三部曲 [rootserver1 ~]# yum install -y bzip2 systemd-devel libxml2-devel sqlite-devel libpng-devel libcurl-devel ##依赖性 [rootserver1 ~]# yum…

python如何对list求和

如何在Python中对多个list的对应元素求和&#xff0c;前提是每个list的长度一样。比如&#xff1a;a[1&#xff0c;2&#xff0c;3]&#xff0c;b[2&#xff0c;3&#xff0c;4]&#xff0c;c[3&#xff0c;4&#xff0c;5]&#xff0c;对a&#xff0c;b&#xff0c;c的对应元素…

Maven常用命令介绍(Ⅰ)

基本命令 Maven生命周期 Maven的生命周期是对所有的构建过程进行抽象和统一。Maven的生命周期是抽象的&#xff0c;这意味着生命周期本身不做任何实际的工作&#xff0c;生命周期只是定义了一系列的阶段&#xff0c;并确定这些阶段的执行顺序。而在执行这些阶段时&#xff0c;…

父亲节马上到了-和我一起用Python写父亲节的祝福吧

前言 让我们一起用Python写一段父亲节的祝福吧 &#x1f4dd;个人主页→数据挖掘博主ZTLJQ的主页 个人推荐python学习系列&#xff1a; ☄️爬虫JS逆向系列专栏 - 爬虫逆向教学 ☄️python系列专栏 - 从零开始学python 话不多说先上代码 import tkinter as tk from doctest imp…

MEMS:Lecture 16 Gyros

陀螺仪原理 A classic spinning gyroscope measures the rotation rate by utilizing the conservation of angular momentum. 经典旋转陀螺仪通过利用角动量守恒来测量旋转速率。 Coriolis Effect and Coriolis Force 科里奥利效应是一种出现在旋转参考系中的现象。它描述了…

显示类控件——Label

&#x1f40c;博主主页&#xff1a;&#x1f40c;​倔强的大蜗牛&#x1f40c;​ &#x1f4da;专栏分类&#xff1a;QT ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 文章目录 一、Label介绍属性代码示例: 显示不同格式的文本代码示例: 显示图片代码示例: 文本对齐, 自动换行…

PFA 反应罐内衬特氟龙 润滑绝缘行业加工 匠心工艺

PFA反应罐别名也叫反应瓶&#xff0c;储样罐&#xff0c;清洗罐等。可作为样品前处理实验中消解样品和中低压溶样的反应容器&#xff0c;广泛应用于半导体分析、新材料、新能源、同位素分析等。 PFA反应罐规格参考&#xff1a;250ml、300ml、350ml、500ml、1L等。 产品特点&…

大众点评js逆向过程(未完)

1、这里mtgsig已经被拼到url中 2、进入后mtgsig已经计算完&#xff0c; ir he(this[b(4326)], !1), 就是加密函数 32 次 796 1143 ->508 -> 754 -> 1151 160 注意IC这个数组 控制流平坦化进行AST 解析 AST网址

Swift开发——循环执行方式

本文将介绍 Swift 语言的循环执行方式 01、循环执行方式 在Swift语言中,主要有两种循环执行控制方式: for-in结构和while结构。while结构又细分为当型while结构和直到型while结构,后者称为repeat-while结构。下面首先介绍for-in结构。 循环控制方式for-in结构可用于区间中的…

2024全新仿麻豆视频苹果cms源码v10影视模板

下载地址&#xff1a;2024全新仿麻豆视频苹果cms源码v10影视模板 高端大气的设计&#xff0c;适合做电影、连续剧、综艺、动漫、微电影、纪录片、海外剧等视频网站