javascript tofixed四舍五入的方法

javascript tofixed四舍五入的方法

Number.prototype.toFixed = function(d) {
    var s = this + "";
    if (!d) d = 0;
    if (s.indexOf(".") == -1) s += ".";
    s += new Array(d + 1).join("0");
    if (new RegExp("^(-|\\+)?(\\d+(\\.\\d{0," + (d + 1) + "})?)\\d*$").test(s)) {
        var s = "0" + RegExp.$2,
            pm = RegExp.$1,
            a = RegExp.$3.length,
            b = true;
        if (a == d + 2) {
            a = s.match(/\d/g);
            if (parseInt(a[a.length - 1]) > 4) {
                for (var i = a.length - 2; i >= 0; i--) {
                    a[i] = parseInt(a[i]) + 1;
                    if (a[i] == 10) {
                        a[i] = 0;
                        b = i != 1;
                    } else break;
                }
            }
            s = a.join("").replace(new RegExp("(\\d+)(\\d{" + d + "})\\d$"), "$1.$2");
        }
        if (b) s = s.substr(1);
        return (pm + s).replace(/\.$/, "");
    }
    return this + "";
};

javascript微信ios自动播放音效方法

javascript微信ios自动播放音效方法

 wx.config({
        //debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
        appId: $('#appId').val(), // 必填,公众号的唯一标识
        timestamp: $('#timestamp').val(), // 必填,生成签名的时间戳
        nonceStr: $('#nonceStr').val(), // 必填,生成签名的随机串
        signature: $('#signature').val(), // 必填,签名,见附录1
        jsApiList: ['checkJsApi', 'onMenuShareTimeline', 'onMenuShareAppMessage', 'onMenuShareQQ', 'onMenuShareWeibo', 'hideMenuItems', 'showMenuItems', 'hideAllNonBaseMenuItem', 'showAllNonBaseMenuItem', 'translateVoice', 'startRecord', 'stopRecord', 'onRecordEnd', 'playVoice', 'pauseVoice', 'stopVoice', 'uploadVoice', 'downloadVoice', 'chooseImage', 'previewImage', 'uploadImage', 'downloadImage', 'getNetworkType', 'openLocation', 'getLocation', 'hideOptionMenu', 'showOptionMenu', 'closeWindow', 'scanQRCode', 'chooseWXPay', 'openProductSpecificView', 'addCard', 'chooseCard', 'openCard']
    });
    var ntitle = $('#ntitle').val();
    var ndesc = $('#ndesc').val();
    var nlogo = $('#nlogo').val();
    var link = $('#link').val();
    wx.ready(function() {
        var musiclen = $('#bgmusic').length;
        if (musiclen > 0) {
            playbgmusic();
            $('#yinxiao').load();
            fm2 = function() {
                $('#yinxiao')[0].play();
            };
        }
        wx.checkJsApi({
            jsApiList: ['onMenuShareAppMessage', 'onMenuShareTimeline'],
            success: function(res) {
                //alert(JSON.stringify(res));
            }
        });
        wx.hideMenuItems({
            menuList: ['menuItem:copyUrl'] // 要隐藏的菜单项,只能隐藏“传播类”和“保护类”按钮,所有menu项见附录3
        });
        commonshare(ntitle, ndesc, nlogo, link);
    });


fm2();

javascript关于box2djs和matterjs之间的选择

javascript关于box2djs和matterjs之间的选择
box2djs资料少很多时候需要看c++版本资料 然后转化成js 还有转化成像素坐标不准确

matterjs文档丰富 上手容易 建议用matterjs
如果发生穿透可以考虑如下因素
1.力度设置的太大
2.刚体自动休眠开启了
3.其他主要是密度 弹性这些参数设置合适
4 刚体加厚 刚体叠加
5 清除没有用的刚体提高性能
更多参考因素
刚体叠加、动量重置、强制跟随、动量缓冲、动态拦截。

刚体叠加就是在同个位置设置多个刚体,这方法对静态刚体有用,可以提高拦截成功率;动量重置是在容易穿透的地方设一个坐标检测区,在移动刚体进入这个区域后立刻让其休眠,旋即唤醒。看似多此一举,实则在休眠时已经重置了其动量,加速惯性就消失了,然后再运动,惯性就小了很多;强制跟随是渲染物体和刚体间的对应关系不稳定,因为laya和matter的坐标不同,导致了这个渲染体和刚体的位置有偏差,可以通过观察其对应位置来设置偏移量,但一旦刚体旋转就会变乱。这时要用三角函数来修正。这需要观察和耐心的修正位置来解决;动量缓冲是在容易穿透的位置动态的设置一个反方向的作用力,来部分抵消移动刚体的动量;动态拦截是一种比较高级的应对方式,在可能穿透的地方设置一个强壮的刚体,通过判断移动刚体的位置,如果将要抵达穿透多发地带,则强壮刚体移动到穿透区,加强穿透区的防御力量。这个方法和刚体叠加的区别是这个可以用于动态刚体的防穿保护,在动态刚体移动的同时,强壮刚体也可以伴随动态刚体移动,直到通过穿透易发区为止,强壮刚体就像是特殊路段的保镖一样。
这些方法都有不同场景下的适用性,多个方法协同作用大大降低了刚体穿透的问题。 还有减少物体速度也可以减少穿透

javascript采用Broadway实现安卓视频自动播放的方法(这种坑比较多 不建议使用)

javascript采用Broadway实现安卓视频自动播放的方法
Broadway 是一个 H.264 解码器, 比jsmpge清晰度要高 使用 Emscripten 工具从 Android 的 H.264 解码器转化而成,它还针对 WebGL 做了一些优化。

1 先把mp4要转下 ffmpeg -i in.mp4 -s 500×804 -vcodec libx264 -pass 1 -coder 0 -bf 0 -flags -loop -wpredp 0 out.mp4
2 代码如下

<html>
<head>
  <link type="text/css" href="screen.css" rel="stylesheet" />
</head>
<body onload="load()">
  <script src="/moban/js/jquery.min.js"></script>
  <script type="text/javascript" src="Decoder.js"></script>
  <script type="text/javascript" src="YUVCanvas.js"></script>
  <script type="text/javascript" src="Player.js"></script>
  
  <script type="text/javascript" src="stream.js"></script>
  
  <script type="text/javascript" src="mp4.js"></script>
  
  <script type="text/javascript">
    function load() {
    var broadwaynode=$('.broadway')[0];
    var broadway = new Broadway(broadwaynode);
    broadway.play();
    }
  </script>
  

  <div class="broadway" src="mozilla_story.mp4" width="640" height="360" style="float: left; position: relative;" workers="false" render="true" webgl="auto"></div>
</body>
</html>
// 用绝对定位是为了挡住下面的调试信息
canvas{
       width: 100%;
    height: 100%;
    position: absolute;
    left: 0px;
    top: 0px;
    z-index: 101;
}


  var broadwaynode=$('.broadway')[0];
    var broadway = new Broadway(broadwaynode);
    broadway.play();

3 官网资料 https://github.com/mbebenita/Broadway

ps:Unrecognized option ‘wpredp’这个错误 说明 ffmpge不完整 建议用win版本

javascript监听手机返回键

javascript监听手机返回键

    if (window.history && window.history.pushState) {
        $(window).on('popstate', function() {
            var hashLocation = location.hash;
            var hashSplit = hashLocation.split("#!/");
            var hashName = hashSplit[1];
            if (hashName !== '') {
                var hash = window.location.hash;
                if (hash === '') {
                    $('.tcclose').css('display', 'none');
                    return false;
                }
            }
        });
        window.history.pushState('forward', null);
    }