【cocos creator】输入框滑动条联动小组建

news2024/12/24 9:08:15

在这里插入图片描述
滑动条滑动输入框内容会改变
输入框输入,滑动条位置改变
在这里插入图片描述


const { ccclass, property } = cc._decorator;

@ccclass()
export default class SliderEnter extends cc.Component {
    @property({ type: cc.Float, displayName: "最大值", tooltip: "" })
    public maxNum: number = 100;
    @property({ type: cc.Float, displayName: "最小值", tooltip: "" })
    public minNum: number = 0;
    @property({ type: cc.Float, displayName: "输入框初始值", tooltip: "" })
    public editBoxStart: number = 0;
    @property({ type: cc.Float, displayName: "滑动条初始位置", min: 0, max: 1, tooltip: "0~1,支持小数,对应输入框初始值" })
    sliderStart = 0;
    @property({ type: cc.Integer, displayName: "保留小数位数", tooltip: "" })
    public fixTo: number = 0;
    @property({ type: cc.EditBox, displayName: "输入框", tooltip: "" })
    public editBox: cc.EditBox = null;
    @property({ type: cc.Slider, displayName: "滑动条", tooltip: "" })
    public slider: cc.Slider = null;

    _sliderStart = 0;
    _editBoxStart = 0;

    protected onLoad(): void {
        this.onResetBtn()
        // this._sliderStart = this.slider.progress;
        // this._editBoxStart = this.checkEditBox()
        this.addHandler(this.slider.slideEvents, this.onSlide, "onSlide", this)
        this.addHandler(this.editBox.editingDidEnded, this.onSlide, "onEnter", this)
    }

    getData() {
        let num = this.checkEditBox()
        return num
    }

    onResetBtn() {
        this._sliderStart = this.sliderStart;
        this._editBoxStart = this.editBoxStart
        this.slider.progress = this._sliderStart
        this.editBox.string = this.fixForceStr(this._editBoxStart, this.fixTo)
    }

    checkEditBox() {
        let num = this.getInt(this.editBox.string, 0)
        if (num > this.maxNum) num = this.maxNum;
        if (num < this.minNum) num = this.minNum;
        this.editBox.string = num + ""
        return num;
    }

    onEnter() {
        let num = this.checkEditBox()
        if (num == this._editBoxStart) {
            num = this._sliderStart
        }
        else if (num <= this._editBoxStart) {
            this.slider.progress = (num - this.minNum) / (this._editBoxStart - this.minNum) * this._sliderStart
        }
        else {
            this.slider.progress = this._sliderStart + (num - this._editBoxStart) / (this.maxNum - this._editBoxStart) * (1 - this._sliderStart)
        }
    }

    onSlide() {
        let progress = this.slider.progress
        let num = 0
        if (progress < 0) progress = 0
        if (progress > 1) progress = 1
        this.slider.progress = progress
        if (progress == this._sliderStart) {
            num = this._editBoxStart
        }
        else if (progress <= this._sliderStart) {
            num = this.minNum + (this._editBoxStart - this.minNum) * progress / this._sliderStart
        }
        else {
            num = this._editBoxStart + (progress - this._sliderStart) * (this.maxNum - this._editBoxStart) / (1 - this._sliderStart)
        }
        this.editBox.string = this.fixForceStr(num, this.fixTo)
    }

    addHandler(fun: any, handler, fnName = "", scope, eventData = "") {
        if (!fnName || !scope[fnName]) {
            fnName = "__BtnClick__" + (Math.random() + "").slice(2, 15);
            scope[fnName] = handler;
        }
        let eventHandler = new cc.Component.EventHandler();
        eventHandler.target = scope.node;
        eventHandler.component = cc.js.getClassName(this);
        eventHandler.handler = fnName;
        eventHandler.customEventData = eventData;
        if (typeof (fun) == "object" && cc.isValid(fun.length)) fun.push(eventHandler);
        return eventHandler
    }

    fixForceStr(count, fixTo): string {
        let a = (count + "").split(".");
        if (fixTo == 0) return a[0]
        let b = a[0];
        if (a.length > 1) b = a[0] + "." + a[1].slice(0, fixTo);
        if (b == "0.00" || b == "0.0") {
            return a[0]
        }
        return b;
    }

    getInt(data, defaultNum) {
        let num = Number(data)
        return isNaN(num) ? defaultNum : num;
    }
}

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

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

相关文章

基于Web的停车场管理系统(论文+源码)_kaic

摘要 我国经济的发展愈发迅速&#xff0c;车辆也随之增加的难以想象&#xff0c;因此车位的治理也越来越繁杂&#xff0c;为了方便停车位相关信息的管理&#xff0c;设计开发一个合理的停车位管理系统尤为重要。因而&#xff0c;具有信息方便读取和操作简便的停车位管理系统的设…

Java基础-知识点

文章目录 数据类型包装类型缓存池 String概述不可变的含义不可变的好处String、StringBuffer、StringBuilderString.intern() 运算参数传递float与double隐式类型转换switch 继承访问权限抽象类与接口super重写与重载**1. 重写(Override)****2. 重载(Overload)** Object类的通用…

H3C GRE over IPsec VPN 实验

H3C GRE over IPsec VPN 实验 实验拓扑 ​​ 实验需求 某企业北京总部、上海分支、武汉分支分别通过 R1,R3,R4 接入互联网,配置默认路由连通公网按照图示配置 IP 地址,R1,R3,R4 分别配置 Loopback0 口匹配感兴趣流,Loopback1 口模拟业务网段北京总部拥有固定公网地址…

VMware Fusion 13.6.1 发布下载,修复 4 个已知问题

VMware Fusion 13.6.1 发布下载&#xff0c;修复 4 个已知问题 VMware Fusion 13.6.1 for Mac - 领先的免费桌面虚拟化软件 适用于基于 Intel 处理器和搭载 Apple 芯片的 Mac 的桌面虚拟化软件 请访问原文链接&#xff1a;https://sysin.org/blog/vmware-fusion-13/ 查看最新…

找不到xinput1_3.dll怎么解决,快来试试这个几个方法

在计算机系统运行过程中&#xff0c;当我们遭遇“找不到xinput1_3.dll”这一错误提示时&#xff0c;实际上正面临一个软件兼容性、系统组件缺失以及游戏或应用程序无法正常启动的关键问题。深入探究这一现象&#xff0c;我们会发现它可能引发一系列连带问题&#xff0c;例如某些…

【课程设计/毕业设计】Java家政预约管理系统源码+开发文档

项目介绍 一直想做一款家政管理系统&#xff0c;看了很多优秀的开源项目但是发现没有合适的。于是利用空闲休息时间开始自己写了一套管理系统。学习过程中遇到问题可以咨询留言。 在线体验 http://jiazheng.gitapp.cn/ 源码地址 https://github.com/geeeeeeeek/java_jiazh…

JVM和GC案例详解

接上文JVM环境配置说明&#xff1a;上文博客 一、JVM远程连接设置 1. JMX方式连接(这种方式没有GC监控)&#xff0c;设置如下 2. 连接成功后可以查看基础配置参数(和服务器配置一致) 2. jstatd方式连接(这种方式没有CPU监控) 添加jstatd方式连接 双击Tomcat&#xff0…

python可变数据类型和不可变数据类型

先看一段代码。 value1 10 value2 value1 print(value1) print(value2) value1 30 print(value1) print(value2)再看另一段代码。 list1 [1,2,3,4] list2 list1 print(list1) print(list2) list1.append(5) print(list1) print(list2)第一段代码中&#xff0c;value2的值…

深入解析:如何使用LangChain进行RAG处理半结构化数据

深入解析&#xff1a;如何使用LangChain进行RAG处理半结构化数据 引言 在处理半结构化数据如PDF文件时&#xff0c;如何有效提取信息是一个挑战。本文将介绍如何使用LangChain的RAG处理模板处理这样的数据。我们将探讨安装、使用和在项目中集成的完整过程。 主要内容 环境设…

FLBOOK一款强大的电子产品图册制作工具

随着科技的飞速发展&#xff0c;电子产品已经成为我们生活中不可或缺的一部分。为了让消费者更好地了解产品特性、功能及优势&#xff0c;电子产品图册的制作显得尤为重要。今天&#xff0c;我要向大家介绍一款强大的电子产品图册制作工具——FLBOOK。 一、FLBOOK简介 FLBOOK是…

芜湖儿童自闭症寄宿制学校:为孩子打开未来大门

在探索自闭症儿童教育的广阔领域中&#xff0c;寄宿制学校以其独特的教育模式和全面的关怀体系&#xff0c;为自闭症儿童及其家庭带来了新的希望与可能。虽然本文聚焦于芜湖儿童自闭症寄宿制学校的概念&#xff0c;但让我们以广州星贝育园自闭症儿童寄宿制学校为具体实例&#…

登顶!智源BGE首开国产模型Hugging Face月度下载全球第一

BGE&#xff08;BAAI General Embedding&#xff09;系列模型是北京智源人工智能研究院研发的开源通用向量模型&#xff0c;该模型专为各类信息检索及大语言模型检索增强应用而打造。 自2023年8月发布首款模型BGE v1&#xff0c;历经数次迭代&#xff0c;BGE已发展为全面支持“…

百度下拉框出词技术解密:72小时出下拉词软件原理分享

如何才能刷下拉词&#xff1f;这个问题一直是企业做流量时最纠结的问题&#xff0c;百度下拉词作为百度搜索体验中的一项智能化功能&#xff0c;极大地方便了用户快速完成搜索&#xff0c;也成为了企业在搜索引擎优化&#xff08;SEO&#xff09;策略中的重要流量入口。通过研究…

Python学习-函数

函数 文章目录 函数定义与调用参数传递内存分析返回值参数定义默认值参数个数可变的参数关键字参数 变量的作用域 匿名函数基本语法示例lambda与排序高阶函数map函数reduce函数filter函数 多关键字排序 定义与调用 函数可以嵌套用 先定义后调用 def calc(a,b):cabreturn cre…

【Java SE 题库】递归的魅力之--> 汉诺塔问题

&#x1f525;博客主页&#x1f525;&#xff1a;【 坊钰_CSDN博客 】 欢迎各位点赞&#x1f44d;评论✍收藏⭐ 目录 1. 题目 2. 分析 2.1 图解 2.2 代码解析 3. 完整代码 3.1 运行截图 4. 小结 1. 题目 汉诺塔问题是一个经典的递归问题&#xff0c;源自一个古老的印度传…

MYSQL MVCC多版本并发控制机制与原理、可重复读/读已提交原理

1&#xff0c;前置知识回顾 1.1&#xff0c;当前读和快照读 根据前面章节可知&#xff0c;mysql在【可重复读】&#xff08;RR&#xff09;的事务隔离机制下&#xff0c;同一个事务中的多次读取结果是一样的。而【读已提交】&#xff08;RC&#xff09;事务隔离机制&#xff0c…

Spring Integration + MQTT

1. 简介 Spring Integration&#xff1a; Spring Integration是一个开源的Java库&#xff0c;用于构建基于消息的应用程序。它提供了一套丰富的组件和工具&#xff0c;使得开发者可以轻松地开发出可靠、灵活和可扩展的集成解决方案。以下是Spring Integration的一些主要用途&…

剪辑视频怎么学?四大工具助你轻松入门!

无论是制作短视频、记录生活点滴&#xff0c;还是从事专业影视制作&#xff0c;掌握视频剪辑技巧都至关重要。那么&#xff0c;剪辑视频怎么学呢&#xff1f;本文将为大家推荐四款实用的视频剪辑工具&#xff0c;助你轻松入门&#xff01; 福昕视频剪辑&#xff1a;简单易用&a…

基于SpringBoot+Vue的医院预约挂号管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

使用Postman搞定各种接口token实战!

现在许多项目都使用jwt来实现用户登录和数据权限&#xff0c;校验过用户的用户名和密码后&#xff0c;会向用户响应一段经过加密的token&#xff0c;在这段token中可能储存了数据权限等&#xff0c;在后期的访问中&#xff0c;需要携带这段token&#xff0c;后台解析这段token才…