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

news2024/10/7 3:24:00

![在这里插入图片描述](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 方法来返回 图片的编译路径。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

快速构建本地RAG聊天机器人:使用LangFlow和Ollama实现无代码开发

基于LangChain的快速RAG应用原型制作方法 还记得构建智能聊天机器人需要数月编码的日子吗&#xff1f; LangChain这样的框架确实简化了开发流程&#xff0c;但对非程序员来说&#xff0c;数百行代码仍然是一道门槛。 有没有更简单的方法呢&#xff1f; 图片由 Ravi Palwe 在…

Qt 6.13

作业&#xff1a; #include "mywidget.h"mywidget::mywidget(QWidget *parent): QWidget(parent) {this->setStyleSheet("background-color:white");this->resize(600,600);this->setWindowFlag(Qt::FramelessWindowHint);this->setWindowTit…

掌握特劳特定位理论核心,明晰企业战略定位之重

在当今瞬息万变的市场环境中&#xff0c;企业战略定位的重要性日益凸显。它不仅是企业在激烈竞争中保持优势的关键&#xff0c;更是企业实现长期可持续发展的基石。 哈佛大学战略学教授迈克尔波特&#xff08;Michael Porter&#xff09;指出战略就是形成一套独具的运营活动&a…

vue实现拖拽元素;vuedraggable拖拽插件

效果图&#xff1a; 中文文档 以下代码可直接复制使用 安装依赖 npm i -S vuedraggable使用 <template><div class"container"><div>使用flex竖轴布局 <br>handle".mover" 可拖拽的class类名 <br>filter".forbid&qu…

SQL Server Management Studio (SSMS) 20.1 - 微软数据库管理工具

SQL Server Management Studio (SSMS) 20.1 - 微软数据库管理工具 请访问原文链接&#xff1a;https://sysin.org/blog/ssms/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org 笔者注&#xff1a;SQL Server 2014 及之前版本内置…

【C++ | const成员】类的 const数据成员、const成员函数、const对象、mutable 数据成员

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; ⏰发布时间⏰&#xff1a;2024-06-14 2…

webshell后门自查--河马webshel工具介绍

什么是web后门 Java Web 是很多大型厂商的选择&#xff0c;也正是因为如此&#xff0c;Java Web 的安全问题日益得到重视&#xff0c;JSP Webshell 就是其中之一。最著名的莫过于 PHP 的各种奇思妙想的后门&#xff0c;但与 PHP 不同的是&#xff0c;Java 是强类型语言&#x…

原码、反码和补码

原码 原码是数字的二进制表示方式&#xff0c;由符号位和绝对值&#xff08;数值位&#xff09;构成。原码的第一位代表符号位&#xff08;0 代表正数&#xff0c;1 代表负数&#xff09;&#xff1b;第二位开始就是数字的绝对值。 反码 反码的表示方法区分正负数。 正数时…

光照药物稳定性试验箱百科

概念与作用 - 药品稳定性试验箱&#xff1a;一种精密设备&#xff0c;用于模拟药品在不同环境条件下的存储情况。 - 环境模拟&#xff1a;通过控制温度、湿度等参数&#xff0c;复制各种实际储存条件&#xff0c;以测试药品稳定性。 - 保障药品质量&#xff1a;通过试验&…

windows 共享给linux 的使用方法

windows 作为服务器&#xff0c;linux作为客户端进行文件共享&#xff0c;有3种方法&#xff1a;samba nfs&#xff08;网络硬盘&#xff09;虚拟机共享&#xff08;VirtualBox vboxsf&#xff09;。 Samba 共享&#xff1a; 打开【控制面板】-->【启动或关闭windows功能】…

vue 使用 ztree 超大量数据,前端树形结构展示

ztree 是一个很经典的基于jquey开发的树结构编辑展示UI组件库。 创建一个文件 ztree.vue&#xff0c;代码如下&#xff1a; <template><div><div class"ztree vue-giant-tree" :id"ztreeId"></div><div class"treeBox&q…

dbForge Studioor MySQL v6 解锁版 安装教程(MYSQL数据库客户端)

前言 dbForge Studioor MySQL是一个在Windows平台被广泛使用的MySQL客户端&#xff0c;它能够使MySQL开发人员和管理人员在一个方便的环境中与他人一起完成创建和执行查询&#xff0c;开发和调试MySQL程序&#xff0c;自动化管理MySQL数据库对象等工作。 一、下载地址 下载链…

除了英伟达,这些AI概念公司在2024年还有巨大的投资价值(五)

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 猛兽财经在英伟达还没拆股前&#xff0c;股价还是100多美元时&#xff08;2019年&#xff09;就曾多次公开发布文章呼吁大家关注并投资英伟达&#xff0c;以下是猛兽财经在2019年到2022年间公开发布的关于英伟达的部分文…

ESP32-NOW-类 -发送端和接收端的程序

ESP32-NOW-类 -发送端-持续发送-不考虑接收端是否收到-避免程序因接收端没有返回信息而意外停止发送。 import network import espnow import timeclass esp_now_rs(object): # 定义一个ESP-NOW通信类def __init__(self): # 初始化方法self.sta network.WLAN(network.STA_I…

湘潭大学信息与网络安全复习笔记2(总览)

前面的实验和作业反正已经结束了&#xff0c;现在就是集中火力把剩下的内容复习一遍&#xff0c;这一篇博客的内容主要是参考教学大纲和教学日历 文章目录 教学日历教学大纲 教学日历 总共 12 次课&#xff0c;第一次课是概述&#xff0c;第二次和第三次课是密码学基础&#x…

使用Redis将单机登录改为分布式登录

使用Redis将单机登录改为分布式登录 1. 背景 ​ 现在大多数的应用程序登录的方式都是必须满足分布式登录的效果&#xff0c;比如我们在一个客户端登录之后可以在另一个客户端上面共享当前用户的信息&#xff0c;这样在另一个客户端登录的时候就不用用户再次输入自己的账号密码…

2024年哪4种编程语言最值得学习?看JetBrains报告

六个月前,编程工具界的大牛JetBrains发布了他们的全球开发者年度报告。 小吾从这份报告中挑出了关于全球程序员过去一年使用编程语言的情况和未来的采纳趋势,总结出2024年最值得学习的四种编程语言。一起来看看吧。 JetBrains在2023年中开始,就向全球的编程达人们发出了问卷…

R语言数据分析案例27-使用随机森林模型对家庭资产的回归预测分析

一、研究背景及其意义 家庭资产分析在现代经济学中的重要性不仅限于单个家庭的财务健康状况&#xff0c;它还与整个经济体的发展紧密相关。家庭资产的增长通常反映了国家经济的整体增长&#xff0c;而资产分布的不均则暴露了经济不平等的问题。因此&#xff0c;全球视角下的家…

工业园区的弱电智能化总体建设规划

在当今迅速发展的工业环境中&#xff0c;一个高效、智能的工业园区是企业成功的重要基石。随着技术的进步&#xff0c;弱电系统的智能化已不仅仅是便利的象征&#xff0c;更是安全生产和效率提升的必要条件。今天&#xff0c;我们将探讨如何通过弱电智能化系统的总体建设规划来…

小阿轩yx-Apache 网页优化

小阿轩yx-Apache 网页优化 网页压缩与缓存 对Apache服务器优化配置 能让 Apache 发挥出更好的性能 相反&#xff0c;配置糟糕 Apache可能无法正常服务 网页压缩 网站的访问速度是由多个因素所共同决定的 包括应用程序 响应速度网络带宽服务器性能与客户端之间的网络传…