微信網(wǎng)頁H5可視區(qū)執(zhí)行動(dòng)畫薪介、幀動(dòng)畫停在最后一幀祠饺、iOS自動(dòng)播放音頻視頻、React汁政、html2canvas

最近在做一個(gè)微信網(wǎng)頁里面的h5動(dòng)畫營銷項(xiàng)目道偷,遇到了下面幾個(gè)問題,均已解決~(項(xiàng)目是react+umi)

動(dòng)畫到了可視區(qū)再執(zhí)行

用的是animate.css和React_wow, React_wow依賴animate.css
https://cnpmjs.org/package/react-wow
https://daneden.github.io/animate.css/

$ npm install --save animate.css
$ npm install --save react-wow

使用:

import styles from './index.less';
import "animate.css";
import ReactWOW from 'react-wow'
...
...
render(){
    return (
            <ReactWOW animation='fadeIn'  duration='0.5s' delay='1s'>
                <div>123</div>
            </ReactWOW>
    )
}

幀動(dòng)畫

https://www.cnblogs.com/rqqd/p/7998886.html

如果除了使用animate.css里面的動(dòng)畫记劈,還有其他動(dòng)畫需求勺鸦,比如fadeIn進(jìn)來后里面還有幀動(dòng)畫,怎么辦呢抠蚣?測(cè)試發(fā)現(xiàn)ReactWOW的動(dòng)畫只是作用于其子元素祝旷,子元素里面再嵌套一個(gè)div即可寫自己的動(dòng)畫啦,這里用一個(gè)幀動(dòng)畫舉例嘶窄,因?yàn)橄旅嬉f幀動(dòng)畫停留在最后一幀的問題怀跛。

<ReactWOW animation='fadeIn'  duration='1s' delay='1s'>
        <div  style={{position: 'absolute', top: 0, right: 0, width: '48vw', height: '48vw'}} >
               <div  className={styles.animate2} />
         </div>
</ReactWOW>
.animate2 {
  background-size: 186vw 48vw ;
  background-image: url(''); 
  animation: ox2 0.5s steps(4, start) 0ms infinite normal backwards;
}
@keyframes ox2 {
  0% {
    background-position: 0 0;
  }
  100% {
    background-position: -186vw 0;
  }
}

幀動(dòng)畫停在最后一幀

https://www.cnblogs.com/rqqd/p/7998886.html
有的幀動(dòng)畫是infinite的,所有設(shè)置start柄冲,end吻谋,backwards,forwards沒啥影響现横,
但是有的幀動(dòng)畫只執(zhí)行一次漓拾,并且停留在最后一幀阁最,剛開始搜到的是說設(shè)置forwards就可以,其實(shí)不是骇两,還與設(shè)置的stes動(dòng)畫有關(guān)速种,這里確實(shí)要設(shè)置forwards,但是ox11里面就要就不能是:

@keyframes ox11 {
  0% {
    background-position: 0 0;
  }
  100% {
    background-position: -280vw 0;
  }
}

而是:

.animate11 {
  background-size: 280vw 50vw ;
  background-image: url(' ');
  animation: ox11 6s steps(4, end) 1000ms 1  normal forwards;
}
@keyframes ox11 {
  0% {
    background-position: 70vw 0;
  }
  100% {
    background-position: -210vw 0;
  }
}

這樣才能保證是停留在最后一幀低千。

微信網(wǎng)頁ios自動(dòng)播放音頻配阵、視頻

安卓自動(dòng)播放直接加autoplay
但是由于ios安全方面的考慮,不讓自動(dòng)播放媒體資源示血,怎么辦呢棋傍?微信有辦法~

componentDidMount () {
    let wx = window.wx;
    function autoPlayAudio() {
      wx.config({
        // 配置信息, 即使不正確也能使用 wx.ready
        debug: false,
        appId: '',
        timestamp: 1,
        nonceStr: '',
        signature: '',
        jsApiList: []
      });
      wx.ready(function() {
        let audio = document.getElementById('battle_bgm');
        console.log(111, audio)
        if(audio){
          document.getElementById('battle_bgm').play();
        }
      });
    }
    autoPlayAudio()
  }

這里的config錯(cuò)誤也沒關(guān)系,也會(huì)執(zhí)行wx.ready的难审;
不過這里要注意瘫拣,在wx.ready的時(shí)候要保證能拿到audio元素,我一開始加了個(gè)顯示audio的判斷告喊,發(fā)現(xiàn)在wx.ready里面打印沒拿到audio所以沒播放麸拄,誤以為這種方法不行。

html2canvas

對(duì)于不想細(xì)看canvas的童鞋黔姜,用html2canvas還是很方便噠~

<div id="sharePicBox" style={{position: 'absolute', width: '75vw', left: '12.5vw', top: '13vw', textAlign: 'center', height: '129.5vw'}}
      ...// 海報(bào)內(nèi)容
</div>
<div  id='container' style={{position: 'absolute', width: '75vw', left: '12.5vw', top: '13vw', textAlign: 'center', height: '129.5vw'}}></div>

海報(bào)內(nèi)的內(nèi)容加載完成后執(zhí)行下面方法:

generateImage = () => {
    let htmlDom = document.getElementById('sharePicBox');
    if(htmlDom){
      html2canvas( htmlDom , {
        allowTaint: false,   //允許污染
        taintTest: true,    //在渲染前測(cè)試圖片(沒整明白有啥用)
        useCORS: true,      //使用跨域
        background: "#fff",
      }).then(function(canvas) {
        let image = new Image();
        image.src = canvas.toDataURL("image/png");
        image.style.width = '100%';
        let container = document.getElementById('container');
        container.appendChild(image);
        let parent = htmlDom.parentElement
        if(parent){
          parent.removeChild(htmlDom);
        }
        // callBack();          //回調(diào)
      })
    }
  }

顯示的海報(bào)和保存的海報(bào)不一樣的需求

有時(shí)候?yàn)榱舜蠹曳窒砗?bào)沒有廣告嫌疑的顧慮感帅,頁面顯示會(huì)將logo和二維碼隱藏掉,但是長(zhǎng)按保存或者長(zhǎng)按發(fā)送會(huì)有l(wèi)ogo和二維碼地淀,如何實(shí)現(xiàn)呢?先看下這張圖:


image.png

這是從側(cè)面看的頁面內(nèi)層級(jí)岖是,這樣看帮毁,上下兩張背景圖是融為一體的,其實(shí)是兩張圖豺撑,從而實(shí)現(xiàn)海報(bào)的展示和實(shí)際保存圖片看起來不一致的需求烈疚。
如果還有其他元素看起來在海報(bào)上,但實(shí)際保存下來不在海報(bào)上的需求聪轿,那就好辦了:

<div>用絕對(duì)定位實(shí)現(xiàn)看起來在海報(bào)上爷肝,其實(shí)不在生成海報(bào)的html元素里面,即 id="sharePicBox" 的div里面</div>
<div id="sharePicBox" style={{position: 'absolute', width: '75vw', left: '12.5vw', top: '13vw', textAlign: 'center', height: '129.5vw'}}
      ...// 海報(bào)內(nèi)容
</div>
<div  id='container' style={{position: 'absolute', width: '75vw', left: '12.5vw', top: '13vw', textAlign: 'center', height: '129.5vw'}}></div>

禁止頁面滑動(dòng)

為了適配各種手機(jī)屏幕陆错,可能會(huì)有一些頁面在xr手機(jī)上正好灯抛,但是短手機(jī)上就多出一截能上下滑動(dòng),但下面也沒什么內(nèi)容音瓷,要想不讓短手機(jī)上下滑对嚼,只要把在外面的div設(shè)置屬性即可:

<div style={{position: 'absolute', top: 0, height: '100vh' ,width: '100vw', overflow:'hidden'}}>
  ...
</div>

分享設(shè)置(ios和安卓的不同)

這里雖然說的是分享設(shè)置,其實(shí)獲取wx.config都是通用的绳慎。
ios必須是一進(jìn)工程里面就要執(zhí)行纵竖,而且每個(gè)頁面沒辦法單獨(dú)配置漠烧;
而安卓是每個(gè)頁面都要執(zhí)行一次,所以各自頁面可靈活配置不同的內(nèi)容靡砌。

微信開發(fā)工具沒問題已脓,但是手機(jī)上有問題,如何調(diào)試通殃?用eruda

有時(shí)候在微信開發(fā)工具上沒問題度液,但是到手機(jī)上就有問題,用eruda可以看一些打印和請(qǐng)求情況等邓了,挺方便的恨诱。

<script src="/static/eruda.min.js" charset="utf-8"></script>
<script>eruda.init();</script>
image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市骗炉,隨后出現(xiàn)的幾起案子照宝,更是在濱河造成了極大的恐慌,老刑警劉巖句葵,帶你破解...
    沈念sama閱讀 221,635評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件厕鹃,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡乍丈,警方通過查閱死者的電腦和手機(jī)剂碴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來轻专,“玉大人忆矛,你說我怎么就攤上這事∏攵猓” “怎么了催训?”我有些...
    開封第一講書人閱讀 168,083評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)宗收。 經(jīng)常有香客問我漫拭,道長(zhǎng),這世上最難降的妖魔是什么混稽? 我笑而不...
    開封第一講書人閱讀 59,640評(píng)論 1 296
  • 正文 為了忘掉前任采驻,我火速辦了婚禮,結(jié)果婚禮上匈勋,老公的妹妹穿的比我還像新娘礼旅。我一直安慰自己,他們只是感情好颓影,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評(píng)論 6 397
  • 文/花漫 我一把揭開白布各淀。 她就那樣靜靜地躺著,像睡著了一般诡挂。 火紅的嫁衣襯著肌膚如雪碎浇。 梳的紋絲不亂的頭發(fā)上临谱,一...
    開封第一講書人閱讀 52,262評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音奴璃,去河邊找鬼悉默。 笑死,一個(gè)胖子當(dāng)著我的面吹牛苟穆,可吹牛的內(nèi)容都是我干的抄课。 我是一名探鬼主播,決...
    沈念sama閱讀 40,833評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼雳旅,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼跟磨!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起攒盈,我...
    開封第一講書人閱讀 39,736評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤抵拘,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后型豁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體僵蛛,經(jīng)...
    沈念sama閱讀 46,280評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評(píng)論 3 340
  • 正文 我和宋清朗相戀三年迎变,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了充尉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,503評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡衣形,死狀恐怖驼侠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情谆吴,我是刑警寧澤泪电,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站纪铺,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏碟渺。R本人自食惡果不足惜鲜锚,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望苫拍。 院中可真熱鬧芜繁,春花似錦、人聲如沸绒极。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽垄提。三九已至榔袋,卻和暖如春周拐,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背凰兑。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評(píng)論 1 272
  • 我被黑心中介騙來泰國打工妥粟, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人吏够。 一個(gè)月前我還...
    沈念sama閱讀 48,909評(píng)論 3 376
  • 正文 我出身青樓勾给,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親锅知。 傳聞我的和親對(duì)象是個(gè)殘疾皇子播急,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容