当前位置: 首页 > 知识库问答 >
问题:

vue.js - Vue.js中图片加载后拖拽问题?

赵晟睿
2024-04-23

使用vue搭建一个仿window系统。
大体实现思路是:
有一个config变量layers里面装的是每一个组件的相关配置。每一个组件都是以绝对定位的方式定位在页面上,x代表left,y代表top。
在拖动组件的时候,每触发一次mousemove事件就去修改这个config变量。从而实现拖动效果

在更换壁纸组件里,当使用img加载图片没有任何问题。

<div class="prev-view" v-for="item of 5" @click="changeWallpaper(item)">        <img :src="`/src/assets/wallpaper/windows${item}.jpg`" alt="" style="width: 100%; height: 100%;">      </div>

当使用background-image展示图片时拖拽会引起卡顿,但是在切换数次壁纸后就不卡顿了

      <div class="prev-view" v-for="item of 5" @click="changeWallpaper(item)" :style="`background: center / cover no-repeat url(/src/assets/wallpaper/windows${item}.jpg)`">      </div>

共有1个答案

丰辰沛
2024-04-23

问题可能是由于背景图片在初次加载时并未完全加载,导致在拖动过程中需要重新绘制页面,从而引起卡顿。

在Vue.js中,你可以使用v-ifv-show指令来控制元素的显示和隐藏。你可以尝试在图片完全加载之后再显示元素,这样就不会在图片加载的过程中进行拖动操作。

此外,你可以尝试在图片加载完成之后再更新背景图片的样式,可以使用JavaScript的Image对象来监听load事件。以下是一个可能的解决方案:

new Vue({  el: '#app',  data: {    currentWallpaper: 0,    wallpapersLoaded: 0,    wallpapersToLoad: 5  },  methods: {    changeWallpaper(index) {      if (this.wallpapersLoaded < this.wallpapersToLoad) {        this.currentWallpaper = index;        this.loadWallpaper(index);      } else {        this.currentWallpaper = index;        this.updateWallpaperStyle();      }    },    loadWallpaper(index) {      const img = new Image();      img.src = `/src/assets/wallpaper/windows${index}.jpg`;      img.onload = () => {        this.wallpapersLoaded++;        this.updateWallpaperStyle();      };    },    updateWallpaperStyle() {      const wallpaperElement = document.querySelector('.prev-view');      wallpaperElement.style.backgroundImage = `url(/src/assets/wallpaper/windows${this.currentWallpaper}.jpg)`;      wallpaperElement.style.backgroundSize = 'cover';      wallpaperElement.style.backgroundRepeat = 'no-repeat';      wallpaperElement.style.backgroundPosition = 'center';    }  }});

在HTML中,你只需要简单地显示元素:

<div class="prev-view" v-for="item of 5" @click="changeWallpaper(item)"></div>

以上代码会首先加载所有图片,并在所有图片加载完成后更新背景图片的样式。这样可以确保在拖动过程中不会因为图片加载而引起卡顿。

注意,以上代码假设你只有一个需要加载背景图片的元素。如果你有多个元素需要加载背景图片,你可能需要对代码进行一些修改,以便为每个元素分别加载和更新背景图片。

 类似资料:
  • html代码是这样的,动态遍历一个树形结构 控制台看到后端传过来是有数据的,是有链接的 我复制图片的链接,且放到地址栏,回车是可以下载图片。我也有试过写死在img标签,页面能正常显示,说明链接是正常的 树形结构最后一层是没有显示图片。 注:我猜想是只有最后一层才有图片的原因造成的,所以我有些判断v-if,有值才加载。但结果都没显示,前端vue.js的语法不知道怎么写了。所以请问大家,这个得怎么把图

  • 本文向大家介绍Vue.js实现图片的随意拖动方法,包括了Vue.js实现图片的随意拖动方法的使用技巧和注意事项,需要的朋友参考一下 主要代码如下: 以上这篇Vue.js实现图片的随意拖动方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。

  • Vue项目中,首页有一张几乎半瓶的背景图片,在Lighthouse中耗时1600ms,似乎想不到什么办法去进行优化呀?压缩,转webp,或者转base64等等都无法大幅度降低lcp的耗时。请问各位有什么其他的想法吗?

  • 本文向大家介绍JS HTML5拖拽上传图片预览,包括了JS HTML5拖拽上传图片预览的使用技巧和注意事项,需要的朋友参考一下 1.文件API:(File API) file类型的的表单控件选择的每一个文件都是一个file对象,而FileList对象则是这些file对象的集合列表,代表所选择的所有文件。file对象继承于Blob对象,该对象表示二进制原始数据,提供slice方法,可以访问到字节内部

  • 本文向大家介绍js css3实现图片拖拽效果,包括了js css3实现图片拖拽效果的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了css3实现图片拖拽效果的具体代码,供大家参考,具体内容如下 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 本文向大家介绍js实现拖拽上传图片功能,包括了js实现拖拽上传图片功能的使用技巧和注意事项,需要的朋友参考一下 直接把本地图片拉到你设定的图片上传成功后的位置,就ok了,具体代码如下 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。