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

滑动条滑动输入框内容会改变

输入框输入,滑动条位置改变

typescript 复制代码
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;
    }
}
相关推荐
布鲁克零三四四9 天前
Cocos Creator导出obj文件用于后端寻路
cocos creator
烧仙草奶茶2 个月前
【cocos creator】2.x里,使用3D射线碰撞检测
3d·cocos creator·cocos-creator·2.x
仅此而已7292 个月前
Cocos Creator倒计时
游戏引擎·cocos creator
仅此而已7292 个月前
cocosUI多分辨率适配
游戏引擎·cocos creator·多分辩率适配
SilenceJude3 个月前
cocos creator 3学习记录01——如何替换图片
前端·cocos creator
GrimRaider4 个月前
[Cocos Creator] v3.8开发知识点记录(持续更新)
开发·cocos creator
S_clifftop4 个月前
cocos creator如何使用cryptojs加解密(及引入方法)
cocos creator·加密解密·cryptojs
平淡风云4 个月前
cocosCreator获取手机剪切板内容
java·智能手机·typescript·android studio·cocos creator
zhenmu5 个月前
【cocos creator 3.x】 修改builtin-unlit 加了一个类似流光显示的mask参数
cocos creator·shader·effect