针对微信无法自动播放问题

 

由于微信浏览器时不时出现无法自动播放音乐的问题,比如7.0.8及现在的7.0.15,都无法播放音乐。

替代方案:

<!--music start-->
<aside class="media-wrap on">
            <img class="music_on" src="images/music_Light_on.png" alt="">
            <img class="music_off" src="images/music_Light_off.png" alt="">
</aside>
<audio id="autoplay" src="music.mp3"></audio>
function onDomReady() {
    musicSwitch();
    console.log('DOM is ready');
}
// 音乐切换
    function musicSwitch() {
        var mediaWrap = document.querySelector('.media-wrap');
        var audio = document.querySelector('#autoplay');
        var musicOn = document.querySelector('.music_on');
        var musicOff = document.querySelector('.music_off');
        var AudioContext = window.AudioContext || window.webkitAudioContext;
        var audioCtx = new AudioContext();
        // IOS策略,无法自动播放,只能使用原来的方式播放
        var isUseAudioCtx = AudioContext && !/\(i[^;]+;( U;)? CPU.+Mac OS X/gi.test(navigator.userAgent);
        // var isUseAudioCtx = AudioContext;
        var url = audio.getAttribute('src');
        var isPalying = true;
        if (isUseAudioCtx) {
            loadSound(url, audioCtx);
        } else {
            document.addEventListener(
                'WeixinJSBridgeReady',
                function() {
                    audio.play();
                },
                false
            );
            audio.play();
            $('#autoplay').on('ended', function() {
                this.load();
                this.play();
            });
        }
        mediaWrap.addEventListener(
            'click',
            function() {
                if (isUseAudioCtx) {
                    if (audioCtx.state === 'suspended') {
                        audioCtx.resume();
                        isPalying = true;
                    } else {
                        audioCtx.suspend();
                        isPalying = false;
                    }
                } else {
                    if (audio.paused) {
                        audio.play();
                        isPalying = true;
                    } else {
                        audio.pause();
                        isPalying = false;
                    }
                }
                if (isPalying) {
                    mediaWrap.classList.add('on');
                    musicOn.style.display = 'block';
                    musicOff.style.display = 'none';
                } else {
                    mediaWrap.classList.remove('on');
                    musicOn.style.display = 'none';
                    musicOff.style.display = 'block';
                }
            },
            false
        );
    }
    function loadSound(url, context) {
        var request = new XMLHttpRequest();
        request.open('GET', url, true);
        request.responseType = 'arraybuffer';
        // Decode asynchronously
        var onError = function(e) {
            console.log(e);
        };
        request.onload = function() {
            context.decodeAudioData(
                request.response,
                function(buffer) {
                    playSound(buffer, context);
                },
                onError
            );
        };
        request.send();
    }

    function playSound(buffer, context) {
        var source = context.createBufferSource();
        source.buffer = buffer;
        source.connect(context.destination);
        source.start(0);
        source.loop = true;
    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值