redux精品先导课程—03计数器-DOM版本

实现的代码

let $addCounter = $('.counterBox .addCounter');
let $counterPanrl = $('.counterBox .counterPanel');
let $hasAll = $('.allSel .val');
let $maximum = $('.maximum .val');
let $allCount = $('.allCount .val');

const counters = [];

class Counter{
    constructor(counters){
        this.value = 0;
        this.counters = counters;
        this.elt = $('<div class="counter"></div>');

        let incrementBtn = this.incrementBtn = $('<button class="add"></button>');
        let decrementBtn = this.decrementBtn = $('<button class="sub"></button>');
        let oddBtn = this.oddBtn = $('<button class="addIfOdd"></button>');
        let asyncBtn = this.asyncBtn = $('<button class="addAsync"></button>');
        let num = this.num = $(`<span>${this.value}</span>`);

        this.elt.append(decrementBtn,num,incrementBtn,oddBtn,asyncBtn);
        this.decrement = this.decrement.bind(this);
        this.increment = this.increment.bind(this);
        this.addIfOdd = this.addIfOdd.bind(this);
        this.asyncAdd = this.asyncAdd.bind(this);

        incrementBtn.click(this.increment);
        decrementBtn.click(this.decrement);
        oddBtn.click(this.addIfOdd);
        asyncBtn.click(this.asyncAdd);
    }

    decrement(){
        if(this.value === 0) return
        this.num.html(--this.value);
        syncState(this.counters);
    }

    increment(){
        this.num.html(++this.value);
        syncState(this.counters);
    }

    addIfOdd(){
        if(this.value%2 === 0) return
        this.num.html(++this.value);
        syncState(this.counters);
    }

    asyncAdd(){
        setTimeout(()=>{
            this.num.html(++this.value);
            syncState(this.counters);
        },1000)
    }
}

function checkHasAll(counters){
    let val = counters.every(elt=> elt.value !==0)
    $hasAll.html(val+'');
}

function calcMax(counters){
    let val = counters.slice().sort((a,b)=>{
        b.value-a.value
    })[0].value;
    $maximum.html(val);
}

function countAll(counters){
    let val = counters.reduce((accu,elt)=> accu+elt.value,0)
    $allCount.html(val)
}

function syncState(counters){
    checkHasAll(counters);
    calcMax(counters);
    countAll(counters);
}

$addCounter.click(ev=>{
    let counter = new Counter(counters);
    counters.push(counter);
    $counterPanrl.append(counter.elt);
    syncState(counters);
})

效果

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值