目录

  • 先看看效果图
  • 所要实现的功能
  • 看看代码
    • js代码讲解:
  • 下面看看完整代码吧
    • 小程序版本完整代码
    • VUE版本的代码:

先看看效果图

所要实现的功能

在页面上随机的位置显示随机大小的图片,并且每个图片不能重叠,完整实现代码。

看看代码

注:因为没有使用框架的API,所以该代码的逻辑在h5或者小程序,任何地方都适用。

js代码讲解:

list(初始化的数组) 和 arr(在初始化的基础上加上了随机定位的数据和随机的宽高) 是界面要遍历的数组,决定图片渲染数量,这个值也可以改成从后端获取。
最终的数据格式


max 是图片最大值,min 是图片最小值,因为我这个demo 的宽高比是一样的,所以是一个值。

160 是设置边缘宽度
70 是设置边缘高度
边缘是指图片能扩散分布的边缘。

y_left 和 y_top 是对比之前遍历的定位数据和当前的定位数据,取到双方相差的绝对值(30),这里的30可以是前面的max(图片最大宽高),它会直接影响数据得出结果的效率,值越小得出结果越快。

下面看看完整代码吧

小程序版本完整代码

// pages/test2/test2.js
let max = 35;
let min = 12;
let windowWidth = 0;
let windowHeight = 0;
Page({data: {list: [],arr: []},onResize(e) {console.log('eeee', e)if (e.size.windowWidth < windowWidth) returnwindowHeight = e.size.windowHeight - maxwindowWidth = e.size.windowWidth - maxconsole.log('windowHeight',windowHeight)let list = [],width, height;for (let i = 0; i < 90; i++) {height = width = Math.floor(Math.random() * (max - min + 1) + min);list[i] = {i,height,width}}this.setData({list}, () => {var arr = [];let y = 0for (let i = 0; i < this.data.list.length; i++) {y++var left = Math.floor(Math.random() * windowWidth);var top = Math.floor(Math.random() * windowHeight);let obj = {left: left,top: top,item: this.data.list[i]};if (arr.length == 0) {arr.push(obj)} else {//if_Availability  是否可用if (this.if_Availability(left, top, arr)) {arr.push(obj)if (i == this.data.list.length - 1) this.setData({arr})} else {i--;}}}})},onLoad: function (options) {console.log('11111')},if_Availability(left, top, arr) {let status = truefor (let i = 0; i < arr.length; i++) {let y_left = Math.abs(arr[i].left - left)let y_top = Math.abs(arr[i].top - top)// console.log(y_left, y_top, arr);if (y_left < max && y_top < max) {status = false}}return status}
})
<scroll-view scroll-x="true" style="width: 100%;height:100vh"><block wx:for="{{arr}}" wx:key=""><image src="./go.png"style="height:{{item.item.height}}px;width:{{item.item.width}}px;left:{{item.left}}px;top:{{item.top}}px;"></image></block>
</scroll-view>
image{position: absolute;
}

VUE版本的代码:

<template><div class="pages"><!--pages/test2/test2.wxml--><div v-for="(item, index) in arr" :key="index"><img class="div"src="./go.png":style="{height: item.item.height + 'px',width: item.item.width + 'px',left: item.left + 'px',top: item.top + 'px',}"></div></div>
</template><script>
import config from "@/components/config";
import methodUtil from "@/utils/methodUtil";// 图片大小随机范围
let max = 45;
let min = 25;// 图片扩散屏幕范围
let windowWidth = 0;
let windowHeight = 0;
export default {data() {return {arr: []};},onLoad: function (options) {console.log('重启,max35,length90 可以,(max=45,length 50 || max45,length 42)就是大限')let list = [], width, height;for (let i = 0; i < 42; i++) {height = width = Math.floor(Math.random() * (max - min + 1) + min);list[i] = { i, height, width }}var arr = [];let y = 0wx.onWindowResize((e)=>{console.log('eeee', e)if (e.size.windowWidth < windowWidth||e.size.windowHeight<e.size.windowHeight) returnwindowHeight = e.size.windowHeight - maxwindowWidth = e.size.windowWidth - maxconsole.log('windowHeight',windowHeight)for (let i = 0; i < list.length; i++) {y++var left = Math.floor(Math.random() * windowWidth);var top = Math.floor(Math.random() * windowHeight);let obj = {left: left,top: top,item: list[i]};if (arr.length == 0) {arr.push(obj)} else {//if_Availability  是否可用if (this.if_Availability(left, top, arr)) {arr.push(obj)if (i == list.length - 1) this.arr = arr} else {i--;}}}})},methods: {if_Availability(left, top, arr) {let status = truefor (let i = 0; i < arr.length; i++) {let y_left = Math.abs(arr[i].left - left)let y_top = Math.abs(arr[i].top - top)if (y_left < max && y_top < max) {status = false}}return status}}
}
</script><style lang="less" scoped>
.pages {width: 200vw;height: 100vh;margin: 0 auto;position: relative;
}
.div {position: absolute;border-radius: 999rpx;border: 1px solid #d0d0d0;
}
</style>

随机位置显示图片不重叠前端实现详细讲解附效果图,代码可直接使用相关推荐

  1. C#全屏随机位置显示图片的小程序

    想法:将屏幕截图作为程序背景图,在之上弹出提示窗口,选择确定后进行定时图片随机位置显示.(支持ESC键退出) 需要添加的控件:Timer 需要修改的Form1属性为下图红色区域: 资源文件的添加:添加 ...

  2. vue 固定范围内随机位置生成 图片(可其他东西)

    vue 固定范围内随机位置生成 图片(可其他东西) 先说一下思路: 在一个范围内(主要是为了确认随机生成的图片中心点在范围内) 拿到图片半径(可随机,看需求) 随机生成xy坐标 (left,top) ...

  3. vue 前端显示图片加token_前端甩锅神器:vue中的mock使用

    首先声明,本文所介绍的方法,只是用于,在做好前端联调的本分工作之余,把前后端联调责任划清界限,并不用于帮后端定位问题(当然,mock也有更全面的方法促进项目的进行,小女不才,在此不提供介绍): 跟陌生 ...

  4. python 在指定位置显示图片并调整窗口大小(或图片大小)

    接着shell 匹配时间戳写的 # -*- coding: utf-8 -*- import cv2 as cv import time import sysradar_list=[] lidar_m ...

  5. vue 前端显示图片加token_前端Vue3.0:从0到1手把手撸码搭建管理后台系统

    第1节 – 了解项目开发流程 手把手撸码前端 – 第1学时 了解产品从0到1的开发流程,产品经理.UI设计师.研发部.测试工程师 第2节 – 构建vue项目.代码仓库管理 手把手撸码前端 – 第2学时 ...

  6. jar包导出无法显示图片或者音乐_超详细微信表情包制作教程

    微信表情开放平台 https://sticker.weixin.qq.com/ [可接表情包定制,ip设计,私信或留言] [可接表情包定制,ip设计,私信或留言] 1. 注册账号,阅读相关微信表情制作 ...

  7. 图片跟随鼠标样式跟随效果(附完整代码及效果)

    Demo效果如下: 完整代码如下: <!DOCTYPE html> <html lang="en"><head><meta charset ...

  8. 2020最新款影视小程序后端+前端搭建详细教程附源码

    准备工作 教程很详细一步步操作都可以上线,教程都是亲自发布的,希望各位要搬运的时候备注来自哪里 购买云服务器:教程等待更新 购买域名+配置ssl证书:教程待更新 常见问题: 问:域名需要备案吗? 回: ...

  9. Springboot + vue 上传图片 显示图片

    Springboot + vue 上传显示图片 上传图片: 前端: <el-uploadclass="upload-facepic"action="#": ...

最新文章

  1. Spring+Quartz实现定时任务的配置方法
  2. python中cursor属性_Python – AttributeError:’NoneType’对象没有属性’cursor’
  3. AI时代!我选Python因为Python是人工智能的未来
  4. [XSY4197] Snow(树形DP)
  5. 清明节游戏服务器维护,清明节游戏活动【4月2日--4月16日】
  6. 【复赛前排分享(三)】高手上场第一招,这些赛事技巧你掌握了吗?
  7. 泰勒展开与找第一项系数不为1的解题策略
  8. Windows 8.1系统及实用软件
  9. npm下载和使用(超详细)
  10. macOS Monterey 12.3.1 (21E258) 虚拟机 ISO 镜像
  11. B站视频下载与字幕下载转换
  12. 《Python金融大数据风控建模实战》 第8章 Logistic回归模型
  13. Odoo的采购入库单、销售发货单整单被取消,或选择了不生成欠单后又想继续入库或发货,如何处理?
  14. 读《不要等到毕业以后》后感
  15. git 从当前分支copy出新分支
  16. YTU 3086 紧急补习!
  17. 通信网与计算机网络的区别,计算机网络和计算机通信网络之间的本质区别是什么?...
  18. 自制合成孔径雷达(10) 声波和无线电测向
  19. 爬虫奇遇记——爬不到想要的内容
  20. 轻型在线办公—eyeOS

热门文章

  1. 【博客美化】公告栏显示个性时间
  2. iOS开发技巧(系列十八:扩展UIColor,支持十六进制颜色设置)
  3. Sqlserver的触发器的简单使用
  4. Buffer的工作方式
  5. 一段处理百分数的js代码
  6. binutils工具集用法
  7. Windows下安装Mongodb SpringBoot集成MongoDB和Redis多数据源
  8. output_buffering详细介绍
  9. 深入理解PHP之数组遍历
  10. MRTG—网络监控工具