H5 ios android混合开发,H5混合开发IOS中遇到的坑

以下是小编通过整理后得到的在H5混合开发的IOS项目中经常遇到的坑:

1. ios系统手机无法自动播放BGM

这个是苹果系统限制,默认不允许自动播放音频,往往需要点一下触发play()事件才能播放。

那么我们在页面onload后触发播放事件:

document.getElementById('music').play();

到这里一般都可以播放音乐了,如果还不行,很有可能是微信的限制。这时需要调用微信接口。

页面先引入:

然后JS写入微信事件:

document.addEventListener("WeixinJSBridgeReady", function() {

document.getElementById('music').play();

}, false);

这样利用微信接口调用play()事件,可以完美解决ios音频无法autoplay的问题。

2. ios系统摇一摇播放音效事件无效

在实现摇晃(引用了封装好的shake.js)手机触发某一音效这个需求时,发现在微信中,音效没有被触发。后面找到原因:在ios里并没有把自定义摇晃事件shake当成交互动作。而要播放音效,需要用户有交互动作。没有交互,音效就没被加载,那么我们先加载音效,结合上面的微信接口:

document.addEventListener("WeixinJSBridgeReady", function () {

shakeMusic.load();

}, false);

load()过之后,再调用play()即可听到音效。

3. ios系统不支持动画暂停样式(animation-play-state)

H5页面一般都会有BGM,也会提供一个旋转的音乐图标供用户开启关闭音乐。我们希望当用户点击音乐按钮时图标停止旋转,再点图标顺着之前停止的位置继续跑动画。animation-play-state是最简便的方式,然而,ios不支持。

目前的解决方案是:音乐图标负责跑动画,图标父级元素负责记录停止时的转动值。

html

music.png

sass

.music {

position: absolute;

width: rem(64px);

height: rem(64px);

top: rem(66px);

left: rem(15px);

z-index: 1000;

img {

width: 100%;

}

}

.musicRun {

-webkit-animation: music 2.5s infinite linear 0.5s;

animation: music 2.5s infinite linear 0.5s;

}

@-webkit-keyframes music {

0% {}

100% {

-webkit-transform: rotate(360deg);

transform: rotate(360deg);

}

}

@keyframes music {

0% {}

100% {

-webkit-transform: rotate(360deg);

transform: rotate(360deg);

}

}

JS

var $img = $('.musicImg')

var music = document.getElementById('music');

var isPlaying = false

running()

$img.on('click', function() {

!isPlaying ? running() : paused()

})

function running() {

music.play();

$img.addClass('musicRun')

isPlaying = true

}

function paused() {

music.pause();

var siteImg = $img.css('transform') //获取当前元素的动画改变,transform的值

var siteWp = $('.music').css('transform')

$('.music').css('transform', siteWp === 'none' ? siteImg : siteImg.concat('', siteWp))

//由于父元素没有动画,所以每次赋值的时候,需要将上次父元素的状态加上

$img.removeClass('musicRun')

isPlaying = false

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值