月度归档:2016年05月

检测鼠标滚轮方向代码分析

/*
*param event.wheelDelta value : 120 (上) / -120 (下) 谷歌、IE、Opera
*param event.detail value : -3 (上) / 3 (下) 火狐
*/

function getWheelDelta(event) {
    if (event.wheelDelta) {
        return event.wheelDelta;
    } else {

        //取相反值 * 40 返回的数据和其他浏览器一致
        return - event.detail * 40;
    }
};

function handleMouseWheel(event) {

    //IE 中 event是未定义的 所以会返回window.event
    event = event || window.event;
    var delta = getWheelDelta(event);
    if (delta == 120) {
        //do something...
        alert('滑轮向上滚动');
    } else if (delta == -120) {
        //do something...
        alert('滑轮向下滚动');
    };
};

//谷歌、IE、Opera 浏览器 mousewheel 事件
document.addEventListener('mousewheel', handleMouseWheel, false);

//火狐自带的 DOMMouseScroll 事件
document.addEventListener('DOMMouseScroll', handleMouseWheel, false);

查看实例:检测鼠标滚轮方向代码分析
下载源码:下载源码

模拟手机端密码输入框(可显示隐藏)

$(function() {

    //页面加载后自动聚焦输入框
    $('#ipt').focus();

    //点击页面任何地方都聚焦输入框
    $(document).on('click',
    function() {
        $('#ipt').focus();
    })

    //为输入框绑定文本框输入事件
    $('#ipt').on('input',
    function(e) {
        var pw = $('#ipt').val();
        var list = $('.psw'),
        lists = $('.pswShow');

        for (var i = 0; i < 6; i++) {
            if (pw[i]) {
                list.find('li').eq(i).text('*');
                lists.find('li').eq(i).text(pw[i]);

            } else {
                list.find('li').eq(i).text('');
                lists.find('li').eq(i).text('');
            }
        }

    });

    //显示密码/隐藏密码
    $('.showBtn').on('click',
    function() {
        var list = $('.psw'),
        lists = $('.pswShow'),
        self = $(this);
        if (lists.hasClass('cur')) {
            list.addClass('cur');
            lists.removeClass('cur');
            self.text('显示密码');
        } else {
            lists.addClass('cur');
            list.removeClass('cur');
            self.text('隐藏密码');
        }
    })
})

查看实例:模拟密码输入框demo
下载源码:下载源码

js浮点数精确计算解决方案(转载)

//除法函数,用来得到精确的除法结果
//说明:javascript的除法结果会有误差,在两个浮点数相除的时候会比较明显。这个函数返回较为精确的除法结果。
//调用:accDiv(arg1,arg2)
//返回值:arg1除以arg2的精确结果
function accDiv(arg1,arg2){
    var t1=0,t2=0,r1,r2;
    try{t1=arg1.toString().split(".")[1].length}catch(e){}
    try{t2=arg2.toString().split(".")[1].length}catch(e){}
    with(Math){
        r1=Number(arg1.toString().replace(".",""));
        r2=Number(arg2.toString().replace(".",""));
        return (r1/r2)*pow(10,t2-t1);
    }
}
//给Number类型增加一个div方法,调用起来更加方便。
Number.prototype.div = function (arg){
    return accDiv(this, arg);
};
//乘法函数,用来得到精确的乘法结果
//说明:javascript的乘法结果会有误差,在两个浮点数相乘的时候会比较明显。这个函数返回较为精确的乘法结果。
//调用:accMul(arg1,arg2)
//返回值:arg1乘以arg2的精确结果
function accMul(arg1,arg2)
{
    var m=0,s1=arg1.toString(),s2=arg2.toString();
    try{m+=s1.split(".")[1].length}catch(e){}
    try{m+=s2.split(".")[1].length}catch(e){}
    return Number(s1.replace(".",""))*Number(s2.replace(".",""))/Math.pow(10,m);
}
//给Number类型增加一个mul方法,调用起来更加方便。
Number.prototype.mul = function (arg){
    return accMul(arg, this);
};
//加法函数,用来得到精确的加法结果
//说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显。这个函数返回较为精确的加法结果。
//调用:accAdd(arg1,arg2)
//返回值:arg1加上arg2的精确结果
function accAdd(arg1,arg2){
    var r1,r2,m;
    try{r1=arg1.toString().split(".")[1].length}catch(e){r1=0}
    try{r2=arg2.toString().split(".")[1].length}catch(e){r2=0}
    m=Math.pow(10,Math.max(r1,r2));
    return (arg1*m+arg2*m)/m;
}
//给Number类型增加一个add方法,调用起来更加方便。
Number.prototype.add = function (arg){
    return accAdd(arg,this);
}
//减法函数
function accSub(arg1,arg2){
     var r1,r2,m,n;
     try{r1=arg1.toString().split(".")[1].length}catch(e){r1=0}
     try{r2=arg2.toString().split(".")[1].length}catch(e){r2=0}
     m=Math.pow(10,Math.max(r1,r2));
     //last modify by deeka
     //动态控制精度长度
     n=(r1>=r2)?r1:r2;
     return ((arg2*m-arg1*m)/m).toFixed(n);
}
///给number类增加一个sub方法,调用起来更加方便
Number.prototype.sub = function (arg){
    return accSub(arg,this);
}

阅读原文:http://www.cnblogs.com/jiahaipeng/archive/2008/10/29/1321821.html

数字金额转换成中文大写

懒得写字,贴代码吧

window.onload = function() {

    //js浮点数精确计算
    var accMul = function(arg1, arg2) {
        var m = 0,
        s1 = arg1.toString(),
        s2 = arg2.toString();
        try {
            m += s1.split(".")[1].length
        } catch(e) {}
        try {
            m += s2.split(".")[1].length
        } catch(e) {}
        return Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, m);
    };

    var digitUppercase = function(n) {
        var fraction = ['角', '分'];
        var digit = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'];
        var unit = [['元', '万', '亿'], ['', '拾', '佰', '仟']];
        var head = n < 0 ? '欠': '';

        //取绝对值 并 转成数值型
        n = Math.abs(n);
        var s = '';

        //Math.floor(x)取小于x的最大整数
        //Math.pow(x,y)取x的y次方
        //取小数点后边的值 并 转换
        for (var i = 0; i < fraction.length; i++) {
            s += (digit[Math.floor(accMul(n, 10) * Math.pow(10, i)) % 10] + fraction[i]).replace(/零./, '');
        }
        s = s || '整';
        n = Math.floor(n);

        for (var i = 0; i < unit[0].length && n > 0; i++) {
            var p = '';
            for (var j = 0; j < unit[1].length && n > 0; j++) {
                p = digit[n % 10] + unit[1][j] + p;
                n = Math.floor(n / 10);
            }
            s = p.replace(/(零.)*零$/, '').replace(/^$/, '零') + unit[0][i] + s;
        }
        return head + s.replace(/(零.)*零元/, '元').replace(/(零.)+/g, '零').replace(/^整$/, '零元整');
    };

    // console.log(digitUppercase(7682.01)); //柒仟陆佰捌拾贰元壹分
    // console.log(digitUppercase(7682));  //柒仟陆佰捌拾贰元整
    // console.log(digitUppercase(951434677682.00)); //玖仟伍佰壹拾肆亿叁仟肆佰陆拾柒万柒仟陆佰捌拾贰元整
    var upCase = document.getElementById('toUpcase');
    var show = document.getElementById('show');
    //console.log(show);
    upCase.focus();
    upCase.onkeyup = function() {
        var thisNum = upCase.value;
        var upNum = digitUppercase(thisNum);

        if (thisNum >= 1e12) {
            show.innerHTML = '金额过多';
            return;
        } else if (thisNum <= -1e12) {
            show.innerHTML = '金额过少';
            return;
        } ! /^-?\d+(\.\d+)?$/.test(thisNum) ? show.innerHTML = '请输入金额': show.innerHTML = upNum;;

    }
}

点击查看实例:数字金额转中文大写demo
下载源码:下载源码