当前位置: 首页 > article >正文

uniapp写移动端常见问题汇总

1. 手机顶部状态栏遮挡

写在需要的地方

<view class="status_bar" style="height: var(--status-bar-height); width: 100%;">

2. 手机顶部状态栏字体颜色

// pages.json
"statusBarStyle": "light",

3. 背景覆盖全屏

page{
  width: 100%;
  height: 100%;
}
.index {
  width: 100%;
  height: 100%;
  background: url("@/static/1-bj.png") no-repeat center;
}

4. 手机端禁止拖拽页面

// pages.json
"pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
	{
		"path": "pages/index/index",
		"style": {
			"app-plus": {
				"bounce": "none"
			}
		}
	}
],

5. 手机端隐藏顶部状态栏和底部按键

onShow: function() {
    // #ifdef APP-PLUS
    // 隐藏顶部电池,时间等信息
    plus.navigator.setFullscreen(true);
    //隐藏虚拟按键
    plus.navigator.hideSystemNavigation()
    // #endif
},

6. 绝对定位计算位置

const bear_box = this.$el.querySelector(".bear_box")
const shovel = this.$el.querySelector(".shovel1")
const sho = this.$el.querySelector(".shovel")
const stick = this.$el.querySelector(".stick")

let len = stick.offsetHeight + sho.offsetHeight
console.log("整个铲子长度:", len)
let top = len * Math.cos(this.deg * Math.PI / 180)
console.log("铲子高度", top)
let left1 = len * Math.sin(this.deg * Math.PI / 180)
console.log("铲子宽度", -left1)
console.log("铲子左侧位置:", bear_box.offsetLeft + shovel.offsetLeft - left1)
console.log("铲子上侧位置:", bear_box.offsetTop + shovel.offsetTop + top)

或者

getElementInfo(className) {
  // 创建选择器对象
  const query = uni.createSelectorQuery().in(this);
  let eleInfo
  // 选择我们想要的元素
  query.select(className).boundingClientRect(data => {
    if (data) {
      eleInfo = data
    }
  }).exec(); // 执行选择器查询
  return eleInfo
}

const shovel = this.getElementInfo(".shovel")
console.log("整个铲子长度:", shovel)

7. 获取整个屏幕宽高

getDeviceInfo() {
  const systemInfo = uni.getSystemInfoSync();
  this.screenWidth = systemInfo.screenWidth
  this.screenHeight = systemInfo.screenHeight
},

8. 获取元素信息

因为有时候获取不到,所以用同步

async getElementInfo(className) {
  return new Promise((resolve, reject) => {
    // 创建选择器对象
    const query = uni.createSelectorQuery().in(this);
    // 选择我们想要的元素
    query.select(className).boundingClientRect(data => {
      if (data) {
        resolve(data);
      } else {
        reject(new Error('如果没有获取到数据,返回错误'));
      }
    }).exec(); // 执行选择器查询
  });
}


const timer = setInterval(async ()=>{
  const shovel = await this.getElementInfo(".shovel")
}, 20)

9. 碰撞检测

碰撞对象的中心坐标减去被碰撞对象的中心坐标的绝对值,
碰撞对象宽度/高度的一半加被碰撞对象宽度/高度的一半。
如果后者(高度与宽度同时)大于前者,两者相撞。
(该功能需要极短时间重复执行)

xCenter(Object)是一个取得jQuery对象相对父元素x轴坐标加上自身元素一半宽度值的函数
yCenter(Object)是一个取得jQuery对象相对父元素y轴坐标加上自身元素一半宽度值的函数

Math.abs(xCenter(碰撞对象) - xCenter(被碰撞对象)) < hWidth(碰撞对象) + hWidth(被碰撞对象)
&& Math.abs(yCenter(碰撞对象) - yCenter(被碰撞对象)) < hHeight(碰撞对象) + hHeight(被碰撞对象)

http://www.kler.cn/a/301521.html

相关文章:

  • 第六节、Docker 方式部署指南 github 上项目 mkdocs-material
  • MySQL中将一个字符串字段按层级树状展开
  • Ubuntu 的 ROS 操作系统 turtlebot3 导航仿真
  • (长期更新)《零基础入门 ArcGIS(ArcMap) 》实验一(下)----空间数据的编辑与处理(超超超详细!!!)
  • Linux下多线程
  • java小练习
  • 反序列化漏洞练习2
  • python 实现判断IP4地址是否有效算法
  • MongoDB延迟查询
  • chapter14-集合——(List-Map)——day18
  • ctfshow-文件包含
  • JavaEE:多线程进阶(线程安全的集合类)
  • Python实现Paillier同态加密算法
  • JavaWeb开发中为什么Controller里面的方法是@RequestMapping?
  • 张力控制器的原理
  • 【2023年】云计算金砖牛刀小试3
  • 《C++枚举类型的进化:从传统到现代的飞跃》
  • SAP B1 学习笔记 - 易混淆字段名(持续更新中)
  • 【c/c++】类型转换:隐式类型转换、强制类型转换
  • Vue - 关于Router路由跳转时显示的animate.css动画
  • ffmpeg使用安装使用教程(命令行-Python)
  • 后端Web之SpringBoot原理
  • Ubuntu 22.04 系统中 ROS2安装
  • 复仇时刻 华为的狙击还没结束
  • JAVA 使用POI实现单元格行合并生成
  • Spring Boot 四大请求编码模板(GET、POST、PUT、DELETE)