uniapp 之 小球根据当前时间 显示位置

news2025/6/16 2:55:35

目录

效果图

 前言

总代码

1. template 代码

 2. script 代码

3. js文件

4.样式

注解

1.小球运动代码

2. picker 时间选择器

 补充


效果图

 前言

最里面的是一张图片,并不是手写的样式,

总代码

1. template 代码

 <uni-popup ref="appointmentPopup" :is-mask-click="false" type="bottom" safe-area background-color="#1e2538"
      style="color: #fff;">
      <view class="" style="height: 100vh; text-align: center;">
        <view class="" style="">定时充电</view>
        <view style="margin: 40rpx 0 20rpx 0;">开始时间</view>
        <picker mode="time" :value="time" :start="timeChange" @change="bindTimeChange">
          <text>{{dateTime}}</text>
        </picker>
        <view class="circleClock">
          <view class="left_box" :style="{transform: 'rotate('+lxl+'deg)'}">
            <view class="left_item"></view>
          </view>
          <image src="/static/images/clock.png" class="clock-img"></image>
        </view>
        <view @click="close">开始定时充电</view>
      </view>
    </uni-popup>

 2. script 代码

<script>
 
  import getDateTime from '@/common/time.js'

  export default {
   
    data() {
      return {
        timeChange: null,
        lxl: null, // 角度
      
        date: '', //起始日期
        endDate: '', //终止日期
        dateTime: '',
        time: '',
       
      }
    },
    
    methods: {
      bindTimeChange(e) {
        this.changeTime = e.detail.value
        let arr = this.dateTime.split(' ')
        this.dateTime = arr[0] + ' ' + this.changeTime
        console.log('开始时间', this.dateTime);
      },
      close() {
        console.log(this.changeTime, this.timeChange, '比较');
        if (this.changeTime !== undefined && this.timeChange > this.changeTime) return uni.$showMsg('开始时间输入不对')
  
        console.log('执行关闭事件');
        // this.$refs.appointmentPopup.close()
      },
     
    },
    onLoad() {
      this.dateTime = getDateTime.hour(0)   // 现在时间
      this.date = getDateTime.getDateStr(null, -1); //昨天
      this.endDate = getDateTime.dateTimeStr('y-m-d'); //今天
      let str = this.dateTime.split('  ')
      this.timeChange = str[1]
      let arr = str[1].split(':')
      // console.log(arr, str, 'arr');
      let hDeg = arr[0] / 24 * 360
      let mDeg = arr[1] / 24 / 60 * 360
      let sDeg = arr[2] / 24 / 60 / 60 * 360
      this.lxl = hDeg + mDeg + sDeg
    },
  }
</script>

3. js文件

function dateTimeStr(str) {
  var date = new Date(),
    year = date.getFullYear(), //年
    month = date.getMonth() + 1, //月
    day = date.getDate(), //日
    hour = date.getHours() < 10 ? "0" + date.getHours() : date.getHours(), //时
    minute = date.getMinutes() < 10 ? date.getMinutes() : date.getMinutes(), //分
    second = date.getSeconds() < 10 ? date.getSeconds() : date.getSeconds(); //秒
  month >= 1 && month <= 9 ? (month = "0" + month) : "";
  day >= 0 && day <= 9 ? (day = "0" + day) : "";
  hour >= 0 && hour <= 9 ? hour : "";
  minute >= 0 && minute <= 9 ? (minute = "0" + minute) : "";
  second >= 0 && second <= 9 ? (second = "0" + second) : "";
  if (str.indexOf('y') != -1) {
    str = str.replace('y', year)
  }
  if (str.indexOf('m') != -1) {
    str = str.replace('m', month)
  }
  if (str.indexOf('d') != -1) {
    str = str.replace('d', day)
  }
  if (str.indexOf('h') != -1) {
    str = str.replace('h', hour)
  }
  if (str.indexOf('i') != -1) {
    str = str.replace('i', minute)
  }
  if (str.indexOf('s') != -1) {
    str = str.replace('s', second)
  }
  return str;
}

//获取日期的今天,明天,后天 -1是昨天,0是今天,1是后一天
function getDateStr(today, addDayCount) {
  let date;
  if (today) {
    date = new Date(today);
  } else {
    date = new Date();
  }
  date.setDate(date.getDate() + addDayCount); //获取AddDayCount天后的日期 
  let y = date.getFullYear();
  let m = date.getMonth() + 1; //获取当前月份的日期 
  let d = date.getDate();
  if (m < 10) {
    m = '0' + m;
  };
  if (d < 10) {
    d = '0' + d;
  }
  console.log(y + "-" + m + "-" + d)
  return y + "-" + m + "-" + d;
}

function hour(e) {
  // 判断是少一个小时还是多一个小时

  if (e < 0) {
    e = e * (-1)
    hourDown(e)
    return
  }
  return hourUp(e)
}

function hourUp(e) {
  // 比现在多几个小时
  var end = Date.now()
  var start = 1000 * 60 * 60 * e
  var interval = end + start; //结束 - 开始 = 毫秒值
  var a = new Date(interval);
  var y = a.getFullYear();
  var m = a.getMonth() + 1;
  m = m < 10 ? "0" + m : m;
  var d = a.getDate();
  d = d < 10 ? "0" + d : d;

  var h = a.getHours();
  h = h < 10 ? "0" + h : h;
  var mm = a.getMinutes();
  mm = mm < 10 ? "0" + mm : mm;
  var s = a.getSeconds();
  s = s < 10 ? "0" + s : s;
  return y + '-' + m + '-' + d + ' ' + ' ' + h + ':' + mm + ':' + s

}

function hourDown(e) {
  // 少多少个小时
  var end = Date.now()
  var start = 1000 * 60 * 60 * e
  var interval = end - start; //结束 - 开始 = 毫秒值
  var a = new Date(interval);
  var y = a.getFullYear();
  var m = a.getMonth() + 1;
  m = m < 10 ? "0" + m : m;
  var d = a.getDate();
  d = d < 10 ? "0" + d : d;

  var h = a.getHours();
  h = h < 10 ? "0" + h : h;
  var mm = a.getMinutes();
  mm = mm < 10 ? "0" + mm : mm;
  var s = a.getSeconds();
  s = s < 10 ? "0" + s : s;
  return y + '/' + m + '/' + d + '  ' + h + ':' + mm + ':' + s;
}
module.exports = {
  dateTimeStr: dateTimeStr,
  getDateStr: getDateStr,
  hour: hour
}

4.样式

<style lang="scss">
  page {
    width: 100%;
    height: 100%;
    color: #fff;

    button::after {
      border: none
    }

    background: #1e2538 !important;
  }
</style>
<style lang="scss" scoped>
  $color : #4763b5;

  .circleClock {
    width: 287px;
    height: 287px;
    border-radius: 50%;
    border: 1px solid $color;
    margin: 44rpx auto;
    position: relative;
    box-shadow: 0 0 50rpx $color;

    .clock-img {
      width: 300rpx;
      height: 300rpx;
      position: absolute;
      left: 138rpx;
      top: 110rpx;
    }
  }


  .left_box {
    margin: 74rpx auto;
    width: 365rpx;
    height: 365rpx;
    border: 1px solid $color;
    overflow: hidden;
    z-index: 1;
    border-radius: 50%;
    animation: loading_left 86400s linear;
  }

  // 小球
  .left_item {
    width: 20rpx;
    height: 20rpx;
    border-radius: 50%;
    background-color: #5e7ef2;
    margin: 0 auto;
  }

  /* 动画 */
  @keyframes loading_left {
    to {
      transform: rotate(1turn);
    }
  }

</style>

注解

1.小球运动代码

 <view class="left_box" :style="{transform: 'rotate('+lxl+'deg)'}">
            <view class="left_item"></view>
          </view>

 最开始没认真看代码 直到后面 我才发现 其实小球没有动画效果,不运动,而运动的是父盒子,

所以 动画角度: transform : rotate(xxdeg)加在父盒子身上

2. picker 时间选择器

时间选择器有个 start 属性,这个属性就是 当滑动时间进行选择时 它能一下跳到当前时间,而它之前的时间不能进行选择

但 这个属性有个弊端 若我不进行滑动 直接点击确定 它的时间会变成00点,然后你在进行选择的话,任何时间都能进行选择,所以在点击开始定时充电的按钮的close事件里 进行时间的一个比较

 补充

如果比较简单的方法,或更好的方法,或觉得我这需要改进的, 请在下面留言,让我们一起共同进步

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

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

相关文章

一图看懂 stat 模块:解析 stat() 结果, 资料整理+笔记(大全)

本文由 大侠(AhcaoZhu)原创&#xff0c;转载请声明。 链接: https://blog.csdn.net/Ahcao2008 [TOC](一图看懂 stat 模块&#xff1a;解析 stat() 结果, 资料整理笔记&#xff08;大全&#xff09;) 摘要 全文介绍系统内置 stat 模块、函数、类及类的方法和属性。 它通过代码抓…

通过自动化和条形码优化供应链

Welch Allyn是全球领先的医疗诊断设备制造商&#xff0c;开发了数百种突破性产品和技术&#xff0c;使一线从业者能够提供卓越的患者护理。它在26个不同的国家拥有近2&#xff0c;500名员工。 一、面临的挑战提高运营效率 原因&#xff1a;用户需要长途跋涉并浏览多个数据条目以…

HCIA第一次笔记

目录 网络基础 扩大网络的两种途径 1.增加网络节点——集线器(HUB) 2.增大传输距离——中继器(放大器) 解决网络问题——网桥、交换机(二层设备) 交换机——读和重写的操作 解决洪泛——路由器(三层设备) 区分是否在同一个洪泛范围——IP(Internet Protocol)地址 ARP协…

redis缓存穿透、案例

1、缓存穿透是什么 缓存穿透是指查询一个一定不存在的数据&#xff0c;由于缓存是不命中时需要从数据库查询&#xff0c;查不到数据则不写入缓存&#xff0c;这将导致这个不存在的数据每次请求都要到数据库去查询&#xff0c;进而给数据库带来压力。 其实&#xff1a;就是黑客…

多线程冲突处理方法,锁

线程之间是可以共享进程的资源&#xff0c;比如代码段、堆空间、数据段、打开的文件等资源&#xff0c;但每个线程都有自己独立的栈空间。 那么问题就来了&#xff0c;多个线程如果竞争共享资源&#xff0c;如果不采取有效的措施&#xff0c;则会造成共享数据的混乱。 我们做…

STM32+收发器实现CAN和485总线

RS485总线是一种常见的(Recommended Standard)串行总线标准(485是它的标识号)&#xff0c;采用平衡发送与差分接收的方式&#xff0c;因此具有抑制共模干扰的能力。CAN是控制器局域网络(Controller Area Network, CAN)的简称&#xff0c;是一种能够实现分布式实时控制的串行通信…

推特爆火!揭晓大模型的未来何去何从

文 | 智商掉了一地巨大挑战 or 发展契机&#xff0c;ChatGPT 和 GPT-4 出现后&#xff0c;大模型的未来方向该何去何从&#xff1f;近期&#xff0c;自然语言处理领域的快速发展引起了广泛的关注&#xff0c;尤其是大型语言模型&#xff08;LLM&#xff09;的兴起已经推动了该领…

4.13、TCP通信流程

4.13、TCP通信流程1.TCP与UDP的区别&#xff08;传输层协议&#xff09;2.TCP通信流程①服务器端&#xff08;被动接受连接的角色&#xff09;②客户端&#xff08;主动发起连接&#xff09;1.TCP与UDP的区别&#xff08;传输层协议&#xff09; UDP:用户数据报协议&#xff0…

【Linux系统文件管理(cat,awk指令)和网络IP配置,广播地址,修改子网掩码以及ping网关地址】

文本操作实验 &#xff08;1&#xff09;使用cat&#xff0c;创建文件test1&#xff0c;输入"Line1"并且按下Ctrl-D保存文件。 创建text01.txt文件&#xff1a; cat > text01.txt 回车&#xff1b;输入自己想要输入的内容 键盘上面按下Ctrl-D就可以成功创建并保存…

【Java版oj】day24洗牌、MP3光标位置

目录 一、洗牌 &#xff08;1&#xff09;原题再现 &#xff08;2&#xff09;问题分析 &#xff08;3&#xff09;完整代码 二、MP3光标位置 &#xff08;1&#xff09;原题再现 &#xff08;2&#xff09;问题分析 &#xff08;3&#xff09;完整代码 一、洗牌 &#x…

西安石油大学C++上机实验 上机三:继承和派生程序设计(2学时)

上机三&#xff1a;继承和派生程序设计&#xff08;2学时&#xff09; 实验目的 了解继承在面向对象程序设计中的重要作用。 理解继承与派生的概念。 掌握通过继承派生出一个新类的方法。 掌握虚基类的作用和用法。 实验内容 P169&#xff1a;5.19, 5.22 上机内容 先设…

Windows 10 上使用 CMake GUI 编译 Krita 源代码并使用 MinGW 64 作为构建工具

krita系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 例如&#xff1a;第一章 Python 机器学习入门之pandas的使用 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文…

TCP和UDP(嵌入式学习)

TCP和UDPTCP&#xff08;即传输控制协议&#xff09;TCP连接建立(三次握手)TCP连接终止&#xff08;四次挥手&#xff09;UDP &#xff1a;用户数据报协议适用情况UDP 洪水UDP TCP 协议相同点TCP&#xff08;即传输控制协议&#xff09; 是一种面向连接的传输层协议&#xff0…

Vue ElementUI Axios 前后端案例(day01)

前言js 问js是什么&#xff0c;他有什么作用&#xff0c;与html和css的区别是什么 JavaScript&#xff08;简称JS&#xff09;是一种脚本语言&#xff0c;用于在网页上实现交互效果、动态效果和动态数据更新等功能。它是一种解释性语言&#xff0c;需要在浏览器中解释和执行。…

Linux中安装新版minio(centos7版本)

1. 背景需求 由于一些限制,在客户现场的Linux操作系统中,没有安装docker k8s等容器,无法直接使用镜像安装,而且客户要求只能在原始的操作系统中安装最新版的minio,(为什么需要安装最新版的minio,因为检测国网检测到之前版本的minio有漏洞,需要安装新版的minio). 2. 安装minio…

Direct3D 12——纹理——纹理缩小

纹理缩小(miniflcation )是纹理放大的逆运算。在缩小的过程中&#xff0c;大量纹素将被映射到少数纹理之 上 。例如&#xff0c;考虑下列情景&#xff1a;假设有一堵被256x256纹理所映射的墙壁&#xff0c;玩家的观察视角正紧盯着它&#xff0c;并 逐渐向后退却。在此过程中&am…

QML控件--Drawer

文章目录一、控件基本信息二、控件使用三、属性成员一、控件基本信息 Import Statement&#xff1a;import QtQuick.Controls 2.14 Since&#xff1a;Qt 5.7 Inherits&#xff1a;Popup 二、控件使用 Drawer&#xff1a;提供一个可以使用滑动手势打开和关闭的侧面板&#xff…

简述内网渗透中常用的隧道工具

frp 项目地址 https://github.com/fatedier/frp/ 简介 frp 是一个可用于内网穿透的高性能的反向代理应用&#xff0c;支持 tcp, udp 协议&#xff0c;为 http 和 https 应用协议提供了额外的能力&#xff0c;且尝试性支持了点对点穿透。 跨平台支持linux&#xff0c;win&a…

【cmake教程】find_path、find_library、find_program

目录 1、find_path 2、find_library 3、find_program find_path 参考文章&#xff1a;CMake中find_path的使用-CSDN博客 find_library 参考文章&#xff1a;CMake中find_library的使用 1、find_path find_path 一般用于在某个目录下查找一个或者多个头文件&#xff0c;命令…

ASP.NET Core - 依赖注入(一)

1. Ioc 与 DI Ioc 和DI 这两个词大家都应该比较熟悉&#xff0c;这两者已经在各种开发语言各种框架中普遍使用&#xff0c;成为框架中的一种基本设施了。 Ioc 是控制反转&#xff0c; Inversion of Control 的缩写&#xff0c;DI 是依赖注入&#xff0c;Inject Dependency 的…