vue框架中,图片应该保存在哪里?应该如何访问?

在使用vue框架进行开发的过程中,有两个文件夹都可以存放我们的图片以及样式等等,一个是public文件夹,一个是src下的assets文件夹;接下来博主会从这两个文件夹对图片的不同处理来进行分析:

public

如果将图片存入public文件夹,系统就会将原来的图片路径及名称编译为一个随机的名字,如下:

经过编译后的图片会极大的减小所占内存,所以在网页中直接展示的图片或者经常随数据库变换而变换的图片都应该放在public文件夹下,这样也可以加快网页的运行速度。

public下的图片用绝对路径来访问(比如下public下的img中有一张图片1.jpg):

src="/img/1.jpg"

如果要访问动态的图片则用如下写法:

let pic = "1.jpg"        

<img :src="`/img/${pic}`">

src/assets

存入assets文件夹下的图片则不会被编译处理,而是原封不动的保存在服务器中;像网页中一些固定不变的图片如登录注册以及其他各种矢量图就应放于assets中。

存于assets中的图片用相对路径来访问

src="@/assets/img/1.jpg"(@就相当于src)

src="../assets/img/1.jpg"

如果要访问动态的图片则用如下写法:

let pic = "1.jpg"

<img :src="require(`../assets/images/a/${pic}`)">


以下内容来自 AI 解释:

在 Vue 框架中,图片等静态资源的管理和访问是一个基础且重要的方面。通常,Vue 项目(特别是基于 Vue CLI 创建的项目)会将静态资源如图片、字体文件、视频等放置在特定的目录中,然后通过特定的路径来访问它们。以下是一些基本准则和步骤:

1. 图片应该保存在哪里?

在 Vue 项目中,你通常会将图片存放在 public 目录或 src/assets目录下。

  • public目录
    • 这个目录下的文件或目录会被直接复制到最终的输出(默认是dist/)目录,且不会被Webpack处理。因此,你可以通过绝对路径来引用它们。
    • 例如,如果你的图片存放在public/images/logo.png,那么你可以通过/images/logo.png这样的路径来访问它(注意开头的斜杠/,它表示根目录)。
  • src/assets目录
    • Vue CLI会将src/assets目录下的资源视为模块依赖来处理,因此你可以使用Webpack的模块解析机制来引入它们。
    • 这意味着你可以使用相对路径来引入资源,Vue CLI还会为这些资源生成哈希名(如果启用了哈希),以避免缓存问题。
    • 例如,如果你的图片存放在src/assets/images/logo.png,那么你可以在Vue组件中通过@/assets/images/logo.png(假设@src目录的别名)来引入它。

2. 应该如何访问?

  • 在Vue组件中访问
    • 如果你是在Vue组件中访问图片,通常会使用requireimport(针对.vue文件中的<template>部分,更常见的是使用require或静态路径)来引入图片。
    • 例如,在<template>中使用<img>标签时,可以直接使用src属性指向图片的路径(无论它是绝对路径还是相对路径)。
    • <script>部分,你可能会使用importrequire来动态加载图片。
  • 在CSS中访问
    • 如果你需要在CSS中访问图片,同样可以使用相对路径或@别名(取决于你的CSS处理器和Webpack配置)。
    • 记住,当图片路径是在CSS文件中时,它通常是相对于CSS文件的位置,而不是Vue组件的位置。

结论

根据你的具体需求和项目结构,你可以选择将图片存放在public目录或src/assets目录下,并通过相应的路径来访问它们。通常,如果你想要Webpack处理你的图片(例如,进行压缩、生成哈希名等),那么将它们放在src/assets目录下会更合适。而如果你需要直接通过URL访问某些静态资源,或者不想让这些资源被Webpack处理,那么public目录可能是更好的选择。

### 回答1: 可以使用 Cesium 的 `BillboardCollection` 类来实现在 Vue 框架点击创建 billboard 的功能。 首先,在 Vue 组件的 data 定义一个变量来存储 billboard 集合: ``` data() { return { billboardCollection: new Cesium.BillboardCollection() } } ``` 然后,在组件的 mounted 钩子函数,将 billboard 集合添加到场景: ``` mounted() { this.viewer.scene.primitives.add(this.billboardCollection); } ``` 接着,在组件的 template 绑定点击事件,在事件处理函数添加新的 billboard: ``` <template> <div @click="addBillboard">Click to add a billboard</div> </template> <script> export default { methods: { addBillboard() { // 获取鼠标点击的位置 let pickedObject = this.viewer.scene.pick(this.viewer.camera.getPickRay(this.viewer.canvas.clientWidth / 2, this.viewer.canvas.clientHeight / 2)); if (Cesium.defined(pickedObject)) { let position = this.viewer.scene.globe.ellipsoid.cartesianToCartographic(pickedObject.position); // 创建新的 billboard let billboard = this.billboardCollection.add({ position: Cesium.Cartesian3.fromRadians(position.longitude, position.latitude, position.height + 100), image: 'path/to/image.png' }); } } } } </script> ``` 在这个例子,我们使用了 Cesium 的 `pick` 方法来获取鼠标点击的位置,然后使用 `Cartesian3.fromRadians` 将经纬度坐标转换为笛卡尔坐标,最后使用 `BillboardCollection.add` 方法添加新的 billboard。 希望这些信息能帮助您实现在 Vue 框架使用 Cesium 创建 billboard 的功能。 ### 回答2: 在Vue框架实现点击创建billboard功能,可以按照以下步骤进行: 1. 首先,在Vue项目引入Cesium库,可以通过npm安装或直接引入Cesium.js文件。 2. 在Vue组件,可以在`mounted`钩子函数创建Cesium的Viewer对象,并将其初始化为指定DOM元素的父元素,如: ``` mounted() { this.viewer = new Cesium.Viewer(this.$refs.mapContainer); } ``` 其`$refs.mapContainer`是在模板定义的一个ref,用于获取地图容器的DOM元素。 3. 在模板定义一个按钮,并绑定一个点击事件,如: ```vue <template> <div> <button @click="createBillboard">创建Billboard</button> <div class="map-container" ref="mapContainer"></div> </div> </template> ``` 4. 在Vue组件的methods选项定义`createBillboard`方法,用于创建billboard。在该方法,可以使用Cesium的`Cesium.Cartesian3`类创建一个位置,然后通过`Cesium.BillboardCollection`类创建一个billboard,并设置其属性,最后将billboard添加到scene。代码示例如下: ```vue methods: { createBillboard() { // 创建位置 var position = Cesium.Cartesian3.fromDegrees(103, 30); // 创建BillboardCollection并设置属性 var billboard = this.viewer.scene.primitives.add( new Cesium.BillboardCollection() ); billboard.add({ position: position, image: "path/to/billboard-image.png", scale: 1.0, }); }, } ``` 其,`Cesium.Cartesian3.fromDegrees`根据经纬度创建一个位置,`Cesium.BillboardCollection`用于存储和渲染多个billboard,`image`属性指定billboard的图片路径,`scale`属性用于设置billboard的大小。 5. 最后,通过点击按钮,调用`createBillboard`方法即可在地图上创建一个billboard。 这样,就在Vue框架实现了点击创建billboard功能。 ### 回答3: 在Vue框架实现点击创建Billboard功能,可以按照以下步骤实现: 1. 首先,将Cesium集成到Vue项目。可以通过npm安装Cesium,然后在Vue组件引入Cesium相关的库文件。 2. 在Vue组件的data选项添加一个数组billboards,用于存储所有的Billboard对象信息。在初始状态下,该数组为空。 3. 在Vue组件的template添加一个Cesium的Canvas元素,用于渲染Cesium场景。可以将该Canvas元素的id设为"cesiumContainer"。 4. 在Vue组件的methods选项添加一个方法handleClick,用于处理点击事件。在该方法内,获取点击事件的坐标,在3D场景添加一个Billboard对象,并将其位置设为点击坐标。然后,将该Billboard对象的信息添加到billboards数组保存。 5. 在Vue组件的mounted钩子函数,通过Cesium的Viewer对象初始化3D场景,并将Canvas元素绑定到该Viewer对象上。同时,监听Canvas元素的点击事件,当点击事件发生时,调用handleClick方法。 6. 在Vue组件的template,使用v-for指令循环遍历billboards数组,并根据每个Billboard对象的信息,在Canvas显示对应的Billboard元素。 通过以上步骤,就可以在Vue框架实现点击创建Billboard功能。当用户在Canvas点击时,会在点击位置创建一个Billboard,并在屏幕上显示出来。同时,Billboard对象的信息也会保存在billboards数组,以便后续的操作和管理。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敬 之

您的鼓励就是我持续创作的动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值