目錄
Step2.序列帧动画
Step3.添加动画控制
首頁 web前端 html教學 揭秘腾讯burberry活动页面中的特效_html/css_WEB-ITnose

揭秘腾讯burberry活动页面中的特效_html/css_WEB-ITnose

Jun 24, 2016 pm 12:02 PM
揭秘 活動 特效 騰訊

4月24日,Burberry亚太地区规模最大的旗舰店在上海开幕。Burberry突破性地运用了诸多创新的数字营销模式,借助与腾讯的合作,为更多未能到场的用户创造了一个“平行的体验”,也正式开启了Burberry的创新数字营销之旅。

腾讯的营销页面: 

其中多次用到了类似于云雾褪去的效果,如下图。

我对这种神奇的特效产生的极大的兴趣,于是通过chrome的审查元素里面Resources找到下面这张图片(由于图片是白色的png,为了让大家看清楚我将背景调成了黑色)。

于是效果的实现方式就显而易见了,是利用css3的-webkit-mask来实现的。

####Step1.为背景加上蒙板  

    <div class="stage">        <div class="sprite1"></div>    </div>
登入後複製
.stage{    width: 320px;    height: 480px;    position: absolute;    left: 50%;    top: 50%;    margin-top:-240px;    margin-left:-160px;    background: url('./img/bg.jpg') no-repeat;    background-size: auto 100%;}.stage .sprite1{    width: 100%;    height: 100%;    background: url('./img/bg2.jpg') no-repeat;    background-size: auto 100%;    -webkit-mask:url('./img/Touch1.png') no-repeat;    -webkit-mask-size: 100% 100%;}
登入後複製

这里为了在桌面浏览器中观看方便,将画面大小调整成了320*480并居中。在 sprite1中添加 background的同时也增加了蒙板。

-webkit-mask:url('./img/Touch1.png') no-repeat;-webkit-mask-size: 100% 100%;
登入後複製

我们这里将蒙板的大小设置为100%来观察蒙板的效果。图中画圈圈的地方就是sprite1透过蒙板展示出来的部分。

我们看到这个蒙板Touch1.png应该是一个序列帧组成的图片,我们只需要将其一帧帧的显示出来就可以实现动画了。
点击查看历史代码

Step2.序列帧动画

.stage .sprite1{    ......    -webkit-mask-size: 400% 300%;    -webkit-mask-position: 0% 0%;}
登入後複製

Touch1.png 是序列帧的整合图片,其中一排有4帧一共有3排,所以我们将 -webkit-mask-size 设为 400% 300% 。将 -webkit-mask-postion 设为 0% 0% 表示从第一帧开始。做动画时只需要依次修改 -webkit-mask-position 的x与y值,每次将x增加25%(100/每排的帧数4)直到75%,y增加33.33%(100/每牌的帧数3)直到66.66%。我们需要将每一帧的position状态在不同的时间赋给sprite1,这只需要用 setTimeout 就可以了。

我们新建一个spriteClip类,并传入(dom,w,h,time)四个参数,其中dom用来定位sprite1这个元素,w为一排有几帧,h为一共有几行,time为每一帧之间的间隔。

function spriteClip(dom,w,h,time){    if(dom){        this.dom = dom;        this.w = w ||0;        this.h = h ||0;        this.time = time || 0;    }else{        return false;    }}
登入後複製

新建run方法。遍历w与h算出时间与位置,用setTimeout设置好延时执行

spriteClip.prototype.run = function(){    for(var w=0;w<this.w for h="0;h<this.h;h++){" var time="(h*self.time*self.w+w*self.time);" settimeout self.dom.style.webkitmaskposition="(100/(self.w-1))*w+'%">  <br>  <br>  <p></p>  <p> 新建并运行spriteClip。</p>  <p> </p>  <pre name="code" class="sycode">var sprite1 = document.querySelector('.sprite1');var sp1 = new spriteClip(sprite1,4,3,50);sp1.run();
登入後複製


运行代码:

点击查看历史代码

Step3.添加动画控制

有了sprite1后,再添加3个sprite,将所有的动画按照顺序播放来形成完整的转场。为了实现按照顺序的播放,我们需要为动画添加播放控制。即在播放动画完成后给dom触发一个finish事件,dom接到完成事件后执行下一个动画。同时添加show和hide用来控制动画的显示/隐藏。

function spriteClip(dom,w,h,time){    if(dom){        ......        //记录dom初始的display状态        this.display = this.dom.style.display;        //记录动画是否播放过        this.played = false;    }else{        return false;    }}spriteClip.prototype.run = function(){    //如果动画已经播放过则不做任何动画    if(this.played)        return false;    //标记为已播放完成    this.played = true;    //让dom显示    this.show();    for(var w=0;w<this.w for h="0;h<this.h;h++){" var time="(h*self.time*self.w+w*self.time);" settimeout ...... if>= self.w-1 && h>=self.h-1){                        //动画结束                        var event = document.createEvent('HTMLEvents');                        event.initEvent('finish', true, true);                        event.eventType = 'message';                        event.content =  'finish';                        //触发finish事件                        self.dom.dispatchEvent(event);                    }                },time);            })(w,h,this);        }    }}//隐藏domspriteClip.prototype.hide = function(){    this.dom.style.display = 'none';}//显示domspriteClip.prototype.show = function(){    this.dom.style.display = this.display;}//接收finish时间并用callback函数处理spriteClip.prototype.finish = function(callback){    this.dom.addEventListener('finish',callback);}var sprite1 = document.querySelector('.sprite1');var sp1 = new spriteClip(sprite1,4,3,50);//在做动画之前让sprite隐藏sp1.hide();document.addEventListener('touchend',function(){    //手指抬起后运行动画    sp1.run();});document.addEventListener('click',function(){    //点击后运行动画    sp1.run();});sp1.finish(function(){    //动画完成    console.log('finish');});</this.w>
登入後複製


下面添加剩下的3个sprite。

.......stage .sprite2{    width: 100%;    height: 100%;    position: absolute;    left: 0px;    top: 0px;    background: url('./img/bg2.jpg') no-repeat;    background-size: auto 100%;    -webkit-mask:url('./img/Touch2.png') no-repeat;    -webkit-mask-size: 400% 300%;    -webkit-mask-position: 0% 0%;}.stage .sprite3{    width: 100%;    height: 100%;    position: absolute;    left: 0px;    top: 0px;    background: url('./img/bg2.jpg') no-repeat;    background-size: auto 100%;    -webkit-mask:url('./img/Touch3.png') no-repeat;    -webkit-mask-size: 400% 300%;    -webkit-mask-position: 0% 0%;}.stage .sprite4{    width: 100%;    height: 100%;    position: absolute;    left: 0px;    top: 0px;    background: url('./img/bg2.jpg') no-repeat;    background-size: auto 100%;    -webkit-mask:url('./img/Touch4.png') no-repeat;    /* Touch4是4*5 */    -webkit-mask-size: 400% 500%;    -webkit-mask-position: 0% 0%;}......<div class="stage">    <div class="sprite1"></div>    <div class="sprite2"></div>    <div class="sprite3"></div>    <div class="sprite4"></div>
</div>.....//新建4个spritevar sprite1 = document.querySelector('.sprite1');var sprite2 = document.querySelector('.sprite2');var sprite3 = document.querySelector('.sprite3');var sprite4 = document.querySelector('.sprite4');var sp1 = new spriteClip(sprite1,4,3,80);var sp2 = new spriteClip(sprite2,4,3,80);var sp3 = new spriteClip(sprite3,4,3,80);var sp4 = new spriteClip(sprite4,4,5,80);sp1.hide();sp2.hide();sp3.hide();sp4.hide();document.addEventListener('touchend',function(){    sp1.run();});document.addEventListener('click',function(){    sp1.run();});sp1.finish(function(){    //sprite1结束后运行sprite2    sp2.run();});sp2.finish(function(){    //sprite2结束后运行sprite3    sp3.run();});sp3.finish(function(){    //sprite3结束后运行sprite4    sp4.run();})......
登入後複製


运行代码:


查看所有代码请去Github

如有问题或者建议请微博@UED天机。我会及时回复,也可以提供其他特效一起讨论其实现方法。


本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1421
52
Laravel 教程
1315
25
PHP教程
1266
29
C# 教程
1239
24
大模型App騰訊元寶上線!混元再升級,打造可隨身攜帶的全能AI助理 大模型App騰訊元寶上線!混元再升級,打造可隨身攜帶的全能AI助理 Jun 09, 2024 pm 10:38 PM

5月30日,騰訊宣布旗下混元大模型全面升級,基於混元大模型的App「騰訊元寶」正式上線,蘋果及安卓應用程式商店皆可下載。相較於先前測試階段的混元小程式版本,面向工作效率場景,騰訊元寶提供了AI搜尋、AI總結、AI寫作等核心能力;面向日常生活場景,元寶的玩法也更加豐富,提供了多個特色AI應用,並新增了創建個人智能體等玩法。 「騰訊做大模型不爭一時之先。」騰訊雲副總裁、騰訊混元大模型負責人劉煜宏表示:「過去的一年,我們持續推進騰訊混元大模型的能力爬坡,在豐富、海量的業務場景中打磨技術,同時洞察用戶的真實需求

王者榮耀共赴花期活動攻略大全 王者榮耀共赴花期活動攻略大全 Mar 24, 2024 pm 12:36 PM

王者榮耀開啟了共赴花期活動,玩家參與活動可以免費領取頭像框和超多好禮,活動有時間限制,共為玩家提供了四個關卡,小編今天給大家帶來了共赴花期活動攻略大全,希望能幫助大家完成關卡挑戰。王者榮耀共赴花期活動攻略大全王者榮耀共赴花期活動介紹活動玩法:1、共赴花期是一個翻牌的活動,玩家需要透過翻牌來通關。 2、玩家在活動期間完成任務獲得花露就能夠翻牌。 3.活動面板中每四張通關卡連成一條線(包括橫線、垂直線和對角線)即可通過一個小關卡。 4.每通關一個關卡就能獲得對應的獎勵,同時幫助好友翻牌也能獲得額外獎勵。活

騰訊 2025 校招啟動:畢業時間從一年拓寬至兩年 騰訊 2025 校招啟動:畢業時間從一年拓寬至兩年 Aug 07, 2024 pm 08:17 PM

本站8月7日消息,昨日騰訊2025校園招募正式啟動,繼2024年實習生招募、「青雲計畫」AI大模型招募專案後再次發出「擴招」訊號:不僅招募規模相較前兩年有較大增長,面向人群的畢業時間範圍也進一步擴大。據介紹,騰訊2025年校園招募開放技術、產品、市場、設計、職能5個大類70餘種職缺。今年的騰訊校園招募將有多處變化,校招面向人群的畢業時間範圍從一年拓寬至兩年。畢業時間為2024年1月至2025年12月的同學(中國大陸/內地以畢業證為準,中國港澳台及海外地區以學位證為準)均可透過騰訊招聘官網及「騰訊

真我身世揭秘:究竟是OPPO的子品牌嗎? 真我身世揭秘:究竟是OPPO的子品牌嗎? Mar 23, 2024 pm 09:24 PM

「真我」身世揭秘:究竟是OPPO的子品牌嗎?隨著智慧型手機市場的不斷發展,各個手機品牌紛紛推出新款產品來滿足消費者不斷變化的需求。其中,一款名為「真我」的手機品牌近年來備受關注,其高性價比和優質的用戶體驗受到了許多消費者的歡迎。然而,關於「真我」手機的身世和品牌背景,一直以來都籠罩著一層神秘的面紗。近日,有消息指出「真我」手機是OPPO的子品牌,這消息在手機圈

Up主已經開始鬼畜,騰訊開源「AniPortrait」讓照片唱歌說話 Up主已經開始鬼畜,騰訊開源「AniPortrait」讓照片唱歌說話 Apr 07, 2024 am 09:01 AM

AniPortrait模型是開源的,可以自由暢玩。 「小破站鬼畜區的新質生產力工具。」近日,騰訊開源發布的一個新項目在推上獲得瞭如此評價。這個項目是AniPortrait,可基於音訊和一張參考圖像生成高品質動畫人像。話不說多,我們先看看可能會被律師函警告的demo:動漫圖像也能輕鬆開口說話:該項目剛上線幾天,就已經收穫了廣泛好評:GitHubStar數已經突破2800。下面我們就來看看AniPortrait的創新之處。論文標題:AniPortrait:Audio-DrivenSynthesisof

騰訊手遊《胡桃日記》復活,1.7萬人報名測試!預計三月中下旬正式開測 騰訊手遊《胡桃日記》復活,1.7萬人報名測試!預計三月中下旬正式開測 Mar 12, 2024 pm 03:28 PM

近日,騰訊去年(2023年2月15日12點00分)停駛的《胡桃日記》宣布重啟,並開啟了二測招募。根據官方透露,2,000人的測試規模,報名了1w7多人,測試預計三月中下旬開啟。原版《胡桃日記》是由巨人網路開發、騰訊遊戲發行的一款美少女陪伴養成手遊,於2021年4月16日發布,台服於2021年10月14日發布。號稱「玩家可與風靡全網的表情包少女七瀨胡桃共同生活、一起種田,輕鬆養成你的胡桃」。但上線後《胡桃日記》收入狀況一直不佳,最終在2022年12月下架,2023年2月停駛。萌百顯示,本作主角七瀨

重返奧馬哈海灘! 《戰車世界》推出諾曼第紀念活動 重返奧馬哈海灘! 《戰車世界》推出諾曼第紀念活動 May 31, 2024 pm 10:25 PM

諾曼地登陸將迎來80週年紀念,《戰車世界》一整個月的活動和特惠將圍繞著「霸王行動」展開——全新的PvE模式、具有主題的戰鬥通行證、全新前線模式發布,以及為期一個月的諾曼第行動令牌商店即將開啟。行動地圖6月3日至6月30日,探索諾曼第海灘並收集最多90個諾曼第行動代幣:從該地圖上取得36個、透過完成每日任務取得另外54個。查看互動式地圖並了解各個活動的開始日期,然後立即開始取得令牌,或解鎖特殊的令牌任務。利用地圖了解諾曼第行動相關活動的詳情,取得足夠的諾曼第行動代幣後,即可前往諾曼第行動代幣商

《命運方舟》日服今日正式停駛 騰訊代理的國服也會涼嗎? 《命運方舟》日服今日正式停駛 騰訊代理的國服也會涼嗎? Mar 21, 2024 am 10:21 AM

於2020年9月在日本上線的MMORPG端遊《命運方舟》,經過近3年半的營運時間,於今日正式關閉日本伺服器。但一直以來,韓遊和日遊幾乎就是完全不相容的兩個派系,口味風格相差非常巨大(尤其是網遊),這也是一直以來韓國網遊都很難在日本站住腳跟的原因。 《命運方舟》日服停駛也算是意料之中吧。那麼問題來了,騰訊代理的《命運方舟》國服呢?首當其衝的是廣大玩家最關心的人氣問題。就目前來看,現在玩《命運方舟》的總共有三類人:土豪、普通玩家和搬磚黨。土豪不必多說了,任何遊戲的土豪玩起來都是比較爽的,《命運方舟》

See all articles