Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
數(shù)據(jù)時(shí)代來臨,品牌都知道它們的消費(fèi)者在“網(wǎng)”上,但他們到底在哪里?每個(gè)公司都知道應(yīng)該把廣告打在社交網(wǎng)絡(luò)里,但如何才能找到這些“人”?人們最愛在新媒體社交平臺上分享什么樣的內(nèi)容?...今天O2O君整理了一篇用數(shù)據(jù)來說明這一切的干貨文章供各位小伙伴學(xué)習(xí)!這些數(shù)據(jù)包含但不局限微信與朋友圈哦!
為了了解社交媒體內(nèi)容投放的準(zhǔn)確性和效果,致力于數(shù)字內(nèi)容營銷的公關(guān)公司Fractl邀請 BuzzStream對其去年6月至11月在11個(gè)垂直行業(yè)發(fā)布的22萬篇文章進(jìn)行了分析,并得出結(jié)果。這是一份告訴你發(fā)布什么類型內(nèi)容、什么時(shí)間發(fā)布內(nèi)容的建議報(bào)告,我們做了一個(gè)簡單的梳理,也許對你有用:
首先,人們最愛在新媒體社交平臺上分享什么樣的內(nèi)容?下面這幾種類型的內(nèi)容被證明是“只要內(nèi)容不太差就不會出錯(cuò)”的:
生活小技能類型(How-to)
如何做好吃的米飯?如何寫簡歷?如何打包行李?如何裝修餐廳?這種類型內(nèi)容的轉(zhuǎn)發(fā)量占到總比的 18.42%。
清單類型(Lists)
15本好書。8條歐洲自駕經(jīng)典路線。10杯拿鐵。5碗鰻魚飯。(貌似最近國內(nèi)也出來一批專門做這個(gè)細(xì)分內(nèi)容的)。這部分內(nèi)容在六個(gè)月的調(diào)查中呈現(xiàn)出最好的分享效果,占到22.45%的比例。
比較類型(What-posts)
大師的作息(對比你的作息,你覺得你成功的幾率有幾分)。倫敦的書店(對比你在的城市,文化的氣息是不是瞬間弱掉了)。但這種方式的風(fēng)險(xiǎn)看起來比較大,變化會呈現(xiàn)13.45%的差異,而且17.88%的比例排名最低。
討論類型(Why-posts)
生還是不生二胎?用不用HTML5?這部分的內(nèi)容也有很好的社交粘性,占到22.32%比例,僅次于清單類型內(nèi)容,這兩種內(nèi)容在分析中得出,在每個(gè)垂直行業(yè),平均每月的轉(zhuǎn)發(fā)量都在21000個(gè)左右,并且浮動低于2.5% 。
視頻(Video)
很簡單,以影片的形式來呈現(xiàn)內(nèi)容。占到總分享比例的 18.94% ,而且在第四季度明顯提升。
其次,每個(gè)行業(yè)領(lǐng)域中的內(nèi)容傳播各不相同,那么哪種內(nèi)容適合什么行業(yè)呢?同時(shí),研究還抓取了每個(gè)行業(yè)中20個(gè)網(wǎng)站,分析內(nèi)容發(fā)布時(shí)間和相關(guān)內(nèi)容的數(shù)據(jù),得出內(nèi)容領(lǐng)域的受關(guān)注程度,雖然每個(gè)月的結(jié)果差距不是很大(差異低于10% )。
旅游
清單形式是旅游內(nèi)容中最占優(yōu)勢的,尤其當(dāng)你的讀者想要出發(fā)的時(shí)候,需要可以去哪些地方的清單,需要行李打包的清單,等等。旅游內(nèi)容32% 的轉(zhuǎn)發(fā)量是清單類內(nèi)容。從社交粘性上看,旅游內(nèi)容的轉(zhuǎn)發(fā)量位列第三。
教育
在旅游內(nèi)容中表現(xiàn)出眾的清單內(nèi)容,在教育領(lǐng)域里就不那么湊效了,相應(yīng)的轉(zhuǎn)發(fā)量只占10%。7 月是教育類內(nèi)容的低谷期,因?yàn)閷W(xué)校放假的原因,轉(zhuǎn)發(fā)量只占10.57% 。
科技
科技內(nèi)容分享會在年底呈現(xiàn)井噴,因?yàn)榇蠹叶荚诳紤]為最新的智能產(chǎn)品買單了。
汽車
How-to類型的內(nèi)容在汽車領(lǐng)域最受歡迎,因?yàn)榇蠹叶加幸恍I(yè)性很強(qiáng)的問題需要解決。
美食
美食類的內(nèi)容中,How-to同樣表現(xiàn)優(yōu)秀,轉(zhuǎn)發(fā)量占總比37%,正如上面的舉例,如何做好米飯,或者做只火雞,越來越多的人開始回歸家庭,尋找做飯的樂趣和儀式感(也是因?yàn)樵S多餐廳的食品安全和衛(wèi)生沒有保障吧)。但食品內(nèi)容的社交粘性并不高,少于2500的轉(zhuǎn)發(fā)量每月。
新聞
社交粘性最高的是新聞類內(nèi)容,每個(gè)月基本上都保持28000的轉(zhuǎn)發(fā)量以上。這些內(nèi)容其實(shí)是很多行業(yè)內(nèi)容的集合和精華。
娛樂
社交粘性位居第二,每月17000以上的轉(zhuǎn)發(fā)量。
商業(yè)
商業(yè)內(nèi)容和金融、生活方式、技術(shù)、教育的社交粘性都在轉(zhuǎn)發(fā)量5000 至9000 ,但商業(yè)內(nèi)容數(shù)據(jù)呈現(xiàn)出的方差很小,證明這部分讀者的忠誠度非常高。
朋友圈廣告的那些大數(shù)據(jù)
品牌都知道它們的消費(fèi)者在“網(wǎng)”上,但他們到底在哪里?每個(gè)公司都知道應(yīng)該把廣告打在社交網(wǎng)絡(luò)里,但如何才能找到那些“合適的人”?
作為微信朋友圈首發(fā)廣告主之一,對于此次想要抵達(dá)的用戶群,他們對于用戶地域、年齡、手機(jī)系統(tǒng)、性別和上網(wǎng)環(huán)境做了一些設(shè)定,“但我們這次其實(shí)是第一次嘗試大的分類原則,就像電視廣告一樣,看到寶馬廣告的不一定就是這個(gè)廣告的目標(biāo)受眾。這次主要是希望把品牌最基本的理念進(jìn)行傳播,而不是具體到想把某款車型推送給某些人。”
也許這一次寶馬并沒有找到真正的消費(fèi)者,但這卻讓他們得到了足夠多的曝光率。根據(jù)寶馬提供的數(shù)據(jù),從25日20:45首發(fā)到次日中午12 點(diǎn)整,第一批有4600萬人可以直接看到,用戶點(diǎn)擊Logo、點(diǎn)贊、評論等互動行為有700萬,寶馬官微的粉絲數(shù)增加了20萬。
與寶馬同一時(shí)間出現(xiàn)在朋友圈的,還有可口可樂和智能手機(jī)vivo。同樣是廣告內(nèi)嵌到用戶信息流當(dāng)中,有文字和圖片構(gòu)成,可附鏈接點(diǎn)擊進(jìn)入完整Html5界面。很多人壓根都沒有看廣告到底長什么樣,就迅速截屏分享,結(jié)果是在很多人都沒有看到真正的廣告時(shí),已經(jīng)被二手廣告刷屏了。
有趣的是,一條“鄙視鏈”也迅疾搭建完畢:刷到寶馬廣告的“鄙視”刷到 vivo的,刷到 vivo的“鄙視”刷到可口可樂的,什么都沒刷到的最后連自己都“呵呵”了。
這條“鄙視鏈”的形成則是因?yàn)榱鱾鞒龅奈⑿藕Y選原則。據(jù)說微信朋友圈廣告是基于大數(shù)據(jù)分析,年收入100 萬以上,收到的是寶馬廣告;買不起iPhone但買得起小米的收到的是vivo廣告,連小米甚至紅米都買不起的,收到的將會是可口可樂的廣告。
最后大家知道了,這并不可信,很多還沒有任何收入的大學(xué)生都被推送了寶馬的廣告,你也大可不必用iPhone瘋狂自拍以正身價(jià)。它還是說明了微信朋友圈的影響力足夠大,讓人們對微信有了一個(gè)新的想象空間。
對于廣告價(jià)格也有不少猜測。目前曝光的一份名為《微信廣告系統(tǒng)介紹》的內(nèi)部PPT顯示,微信朋友圈廣告采取CPM方式售賣,不同區(qū)域每千次曝光收取40-140元不等。如果要加入性別定向,就再乘以一個(gè)1.1的系數(shù)。Html5 外鏈要加價(jià)20%。若以2億左右的展示量計(jì)算,單次投放費(fèi)用在800萬以上。如果再算上鏈接、區(qū)域定向,網(wǎng)上傳播的1000萬以上的合作費(fèi)用是比較可信的。
這未必是真的,但廣告價(jià)格可能確實(shí)不菲?!叭绻麅H僅從曝光的角度,也就是CPM,來和一般的展示廣告相比的話,那換算出來的價(jià)格也就會比一般的展示型廣告要高。但如果跟視頻廣告拿來比,那就又比一般的視頻廣告(價(jià)格)來的低。但是從制造話題的角度來看,它還有很多邊際效應(yīng)。這個(gè)話題的制造,并非一般廣告所能比的。
綜合起來看,包括效益、話題的話,品牌方是會肯定這一次傳播的價(jià)值的?!笔装l(fā)的新鮮感是不可復(fù)制的,當(dāng)朋友圈廣告成為常態(tài)之后,廣告主需要考慮如何讓用戶不會視而不見?!?strong>廣告需要有趣起來,需要有創(chuàng)意起來,品牌不能只把微信當(dāng)做一種硬廣資源,這樣會引起消費(fèi)者的反感。”熊超說。
“如果客戶需要創(chuàng)造一波在涵蓋度上有要求的campaign的話,微信還是一個(gè)很有價(jià)值的媒介渠道。但是客戶如果看中的是廣告的轉(zhuǎn)換度的話,它的價(jià)值如何就需要跟一般的廣告效果對比,再來做評估了。需要根據(jù)客戶的投放目的來選擇?!?陳良怡說。
可口可樂中國表示,對于朋友圈廣告這一全新的媒介應(yīng)用,會進(jìn)一步觀察和評估,現(xiàn)在也看到網(wǎng)絡(luò)上就投放的目標(biāo)用戶方面有很多的調(diào)侃和臆測。品牌有可能會變得更謹(jǐn)慎。
從賺眼球的角度說,性價(jià)比最高的可能是vivo的廣告,它夾在寶馬和可口可樂兩大超級品牌之間,廣告?zhèn)鞑バЧ浅s@人,根據(jù)騰訊官方公開的數(shù)據(jù),同時(shí)間段上線的廣告在次日上午9點(diǎn)整,總曝光量接近1.55 億,用戶點(diǎn)擊“vivo 智能手機(jī)”logo、點(diǎn)贊、評論等行為超過720萬次,vivo官微增加粉絲22萬。從百度搜索指數(shù)來看,vivo也增長更明顯。
對于微信來說,消費(fèi)者是覺得可以接受還是會不勝其擾,要看微信如何在設(shè)定他們的廣告規(guī)則,這個(gè)規(guī)則對于廣告主來說也很重要,微信到底是一時(shí)的新歡,還是具有長期的價(jià)值,都取決于此。它將面對商業(yè)利益和用戶體驗(yàn)的挑戰(zhàn)。
—END —
餐飲O2O(微信ID:coffeeo2o):中國餐飲業(yè)線上線下互動營銷的圈子,每天分享餐飲案例、營銷干貨!用創(chuàng)新商業(yè)模式和互聯(lián)網(wǎng)思維改良傳統(tǒng)行業(yè),是餐飲老板與從業(yè)人員必關(guān)注的公眾平臺。WeMedia聯(lián)盟成員。
加入餐英圈或尋求采訪報(bào)道請聯(lián)系微信:canyinjun
TML5 可以直接在你的網(wǎng)頁中使用 <canvas> 元素及其相關(guān)的 JavaScript API繪制的圖形。
在這篇文章中,我將向你介紹 jCanvas,一個(gè)基于 jQuery的免費(fèi)且開源的 HTML5的Canvas API。
如果你使用 jQuery 進(jìn)行開發(fā),jCanvas能夠使用 jQuery更簡單,更快速的完成一些非常炫酷的 canvas畫布及交互效果。
什么是 jCanvas ?
jCanvas 官網(wǎng)是這樣解釋的:
“ jCanvas is a JavaScript library, written using jQuery and for jQuery, that wraps around the HTML5 canvas API, adding new features and capabilities, many of which are customizable. Capabilities include layers, events, drag-and-drop, animation, and much more.
The result is a flexible API wrapped up in a sugary, jQuery-esque syntax that brings power and ease to the HTML5 canvas. ”
jCanvas 能讓你做的一切事情,你都可以用原生的Canvas API來實(shí)現(xiàn),甚至可以做更多的事情。如果你愿意的話,你也可以將原生的Canvas API方法和 jCanvas一起使用。draw()方法就可以這樣使用。此外,你還可以非常輕松的用自己的方法結(jié)合 extend()函數(shù)來擴(kuò)展jCanvas的功能。
添加jCanvas 到你的項(xiàng)目中
將jCanavs添加在你的項(xiàng)目中,從官方網(wǎng)站或GitHub的頁面上下載腳本,然后將腳本文件放在你的項(xiàng)目文件夾中。正如前面說的,jCanvas需要依賴 jQuery才能正常工作,所以還要確保引入了 jQuery文件。
項(xiàng)目的腳本文件將是這個(gè)樣子:
<script src="js/jquery.min.js></script>
<script src="js/jcanvas.min.js></script>
<script src="js/script.js></script>
最后,引入你自己的JavaScript 代碼文件?,F(xiàn)在,讓我們開始jCanvas之旅吧。
設(shè)置 HTML文檔
我們通過為 HTMl5文檔添加一個(gè)<canvas>標(biāo)簽,來開始我們的示例。
<canvas id="myCanvas" width="600" height="300">
<p>This is fallback content
for users of assistive technologies
or of browsers that don't have
full support for the Canvas API.</p>
</canvas>
以下是關(guān)于上面的代碼片段的幾點(diǎn)說明。
默認(rèn)情況下,<canvas>的尺寸300px x 150px,你可以在width 和 height 屬性里修改默認(rèn)的大小。
id屬性不是必須添加的,但是確是 JavaScript訪問該元素的最簡單的方法。
在<canvas>元素中的內(nèi)容只是位圖,這使得它無法被使用輔助技術(shù)的用戶訪問。另外,對不支持 Canvas API的瀏覽器,將不能夠訪問其內(nèi)容或者任何方式的交互。因此,該技術(shù)旨在讓<canvas>更容易被支持。
如果你想使用原生的Canvas API,你的 JavaScript 代碼將會這樣的:
var canvas=document.getElementById('myCanvas'),
context=canvas.getContext('2d');
上述代碼中的context變量存儲了Canvas對象的一個(gè)2D上下文屬性。正是這種特性,使得你可以訪問 HTML5的 Canvas API提供的所有其他屬性和方法。
如果你想了解的更多,你可以戳這里HTML5 Canvas 簡介。
jCanvas的方法和屬性已經(jīng)包含了2D上下文的引用,因此你可以直接的跳到繪制圖片。
用jCanvas繪制一些圖形
大多數(shù)的 jCanvas方法,接受鍵值對的形式,因此你可以根據(jù)你的需要,或你喜歡的順序去使用它們。
讓我們從繪制一個(gè)矩形開始吧。
矩形
下面是你怎樣用 jCanvas對象的 drawRect() 方法繪制出一個(gè)矩形的方法。
// Store the canvas object into a variable
var $myCanvas=$('#myCanvas');
// rectangle shape
$myCanvas.drawRect({
fillStyle: 'steelblue',
strokeStyle: 'blue',
strokeWidth: 4,
x: 150, y: 100,
fromCenter: false,
width: 200,
height: 100
});
上面的代碼片段表示,存儲 Canvas對象到一個(gè)名為$myCanvas的變量中。里面的drawRect()方法的屬性都是比較簡單的,但是我們在這里簡單的闡述一下:
fillStyle 設(shè)置矩形的背景色;
strokeStyle 設(shè)置它的邊框顏色;
strokeWidth 設(shè)置矩形的邊框?qū)挾?
x 和 y設(shè)置對應(yīng)矩形的坐標(biāo)的水平和垂直的畫布內(nèi)測的位置。頂點(diǎn)的0值的分別為 x和y,也就是說,(0,0),對應(yīng)于畫布的左上角。x坐標(biāo)向右增大,y坐標(biāo)朝向畫布的底部增加。默認(rèn)情況下,jCanvas會以矩形的中心點(diǎn)作為x和y坐標(biāo)的值;
要想改變這一點(diǎn),以便x和y對應(yīng)矩形的左上角,可以將fromCenter屬性的值設(shè)置為 false;
最后,通過寬度和高度屬性設(shè)置矩形的尺寸。
下面是矩形的示例代碼:
HTML:
<h2>jCanvas example: Rectangle</h2>
<canvas id="myCanvas" width="600" height="300">
<p>This is fallback content for users of assistive technologies or of browsers that don't have full support for the Canvas API.</p>
</canvas>
CSS:
body {
text-align: center;
}
canvas {
margin: auto;
display: block;
}
JS:
// Store the canvas object into a variable
var $myCanvas=$('#myCanvas');
// rectangle shape
$myCanvas.drawRect({
fillStyle: 'steelblue',
strokeStyle: 'blue',
strokeWidth: 4,
x: 190,
y: 50,
fromCenter: false,
width: 200,
height: 100
});
Result:
jCanvas example: Rectangle
圓弧和圓
弧是一個(gè)圓的邊緣部分。對于jCanvas來說,畫一個(gè)圓弧僅僅是在 drawArc() 方法里設(shè)置幾個(gè)所需的屬性:
$myCanvas.drawArc({
strokeStyle: 'steelblue',
strokeStyle: 'blue',
strokeWidth: 4,
x: 300, y: 100,
radius: 50,
// start and end angles in degrees
start: 0, end: 200
});
繪制弧形,需要設(shè)置半徑屬性的值,以及開始的角度和結(jié)束的角度。如果你希望弧形是逆時(shí)針方向的話,需要添加一個(gè)ccw屬性,并將其屬性值設(shè)置為true。
下面是上述代碼塊演示:
HTML:
<h2>jCanvas example: Arc</h2>
<canvas id="myCanvas" width="600" height="300">
<p>This is fallback content for users of assistive technologies or of browsers that don't have full support for the Canvas API.</p>
</canvas>
CSS:
body {
text-align: center;
}
canvas {
margin: auto;
display: block;
}
JS:
// Store the canvas object into a variable
var $myCanvas=$('#myCanvas');
$myCanvas.drawArc({
strokeStyle: 'steelblue',
strokeStyle: 'blue',
strokeWidth: 4,
x: 300, y: 100,
radius: 50,
// start and end angles in degrees
start: 0, end: 200
});
Result:
jCanvas example: Arc
繪制一個(gè)圓形:
舉例來說,下面是如何只使用圓弧形狀來繪制出一個(gè)簡單的笑臉圖形:
$myCanvas.drawArc({
// draw the face
fillStyle: 'yellow',
strokeStyle: '#333',
strokeWidth: 4,
x: 300, y: 100,
radius: 80
}).drawArc({
// draw the left eye
fillStyle: '#333',
strokeStyle: '#333',
x: 250, y: 70,
radius: 5
}).drawArc({
// draw the right eye
fillStyle: '#333',
strokeStyle: '#333',
x: 350, y: 70,
radius: 5
}).drawArc({
// draw the nose
strokeStyle: '#333',
strokeWidth: 4,
ccw: true,
x: 300, y: 100,
radius: 30,
start: 0,
end: 200
}).drawArc({
// draw the smile
strokeStyle: '#333',
strokeWidth: 4,
x: 300, y: 135,
radius: 30,
start: 90,
end: 280
});
請記住,jCanvas是基于jQuery的,因此,你可以像jQuery的鏈?zhǔn)讲僮饕粯?,在jCanvas中也可以使用鏈?zhǔn)讲僮鳌?/p>
下面是以上代碼在瀏覽器中的效果:
HTML:
<h2>jCanvas example: Smiling Face</h2>
<canvas id="myCanvas" width="600" height="300">
<p>This is fallback content for users of assistive technologies or of browsers that don't have full support for the Canvas API.</p>
</canvas>
CSS:
body {
text-align: center;
}
canvas {
margin: auto;
display: block;
}
JS:
// Store the canvas object into a variable
var $myCanvas=$('#myCanvas');
$myCanvas.drawArc({
// draw the face
fillStyle: 'yellow',
strokeStyle: '#333',
strokeWidth: 4,
x: 300, y: 100,
radius: 80
}).drawArc({
// draw the left eye
fillStyle: '#333',
strokeStyle: '#333',
x: 250, y: 70,
radius: 5
}).drawArc({
// draw the right eye
fillStyle: '#333',
strokeStyle: '#333',
x: 350, y: 70,
radius: 5
}).drawArc({
// draw the nose
strokeStyle: '#333',
strokeWidth: 4,
ccw: true,
x: 300, y: 100,
radius: 30,
start: 0,
end: 200
}).drawArc({
// draw the smile
strokeStyle: '#333',
strokeWidth: 4,
x: 300, y: 135,
radius: 30,
start: 90,
end: 280
});
Result:
jCanvas example: Smiling Face
繪制線條和路徑
你可以用drawLine()方法快速的繪制直線,或者定義一系列的線條的連接點(diǎn)。
$myCanvas.drawLine({
strokeStyle: 'steelblue',
strokeWidth: 10,
rounded: true,
closed: true,
x1: 100, y1: 28,
x2: 50, y2: 200,
x3: 300, y3: 200,
x4: 200, y4: 109
});
上面代碼設(shè)置了 rounded和closed屬性的值為true,從而所繪制的線和角都是閉合的。
HTML:
<h2>jCanvas example: Connected lines</h2>
<canvas id="myCanvas" width="600" height="300">
<p>This is fallback content for users of assistive technologies or of browsers that don't have full support for the Canvas API.</p>
</canvas>
CSS:
body {
text-align: center;
}
canvas {
margin: auto;
display: block;
}
JS:
// Store the canvas object into a variable
var $myCanvas=$('#myCanvas');
$myCanvas.drawLine({
strokeStyle: 'steelblue',
strokeWidth: 10,
rounded: true,
closed: true,
x1: 100,
y1: 28,
x2: 50,
y2: 200,
x3: 300,
y3: 200,
x4: 200,
y4: 109
});
Result:
jCanvas example: Connected lines
還可以使用drawPath()方法繪制路徑。
該drawPath()方法設(shè)置 x 和 y值,你還需要制定你要繪制的路徑的類型,例如直線,圓弧等。
下面教你如何使用 drawPath()方法和drawarrows()方法畫出一對水平和垂直方向的箭頭,后者是一個(gè)非常好用的jCanvas方法,能夠使你快速的在畫布上繪制一個(gè)箭頭形狀:
$myCanvas.drawPath({
strokeStyle: '#000',
strokeWidth: 4,
x: 10, y: 10,
p1: {
type: 'line',
x1: 100, y1: 100,
x2: 200, y2: 100
},
p2: {
type: 'line',
rounded: true,
endArrow: true,
arrowRadius: 25,
arrowAngle: 90,
x1: 200, y1: 100,
x2: 290, y2: 100
},
p3: {
type: 'line',
rounded: true,
endArrow: true,
arrowRadius: 25,
arrowAngle: 90,
x1: 100, y1: 100,
x2: 100, y2: 250
}
});
結(jié)果展示:
HTML:
<h2>jCanvas example: Connected Arrows</h2>
<canvas id="myCanvas" width="600" height="300">
<p>This is fallback content for users of assistive technologies or of browsers that don't have full support for the Canvas API.</p>
</canvas>
CSS:
body {
text-align: center;
}
canvas {
margin: auto;
display: block;
}
JS:
// Store the canvas object into a variable
var $myCanvas=$('#myCanvas');
$myCanvas.drawPath({
strokeStyle: '#000',
strokeWidth: 4,
x: 10, y: 10,
p1: {
type: 'line',
x1: 100, y1: 100,
x2: 200, y2: 100
},
p2: {
type: 'line',
rounded: true,
endArrow: true,
arrowRadius: 25,
arrowAngle: 90,
x1: 200, y1: 100,
x2: 290, y2: 100
},
p3: {
type: 'line',
rounded: true,
endArrow: true,
arrowRadius: 25,
arrowAngle: 90,
x1: 100, y1: 100,
x2: 100, y2: 250
}
});
Result:
jCanvas example: Connected Arrows
繪制文本
你可以使用drawText()方法快速的繪制出你需要的文字,這個(gè)方法的主要的功能:
text:將此屬性設(shè)置為你想要顯示在畫布上的文字內(nèi)容:例如:‘Hello World’
fontsize:此屬性的值決定了在畫布上的文字的大小。你可以為這個(gè)屬性設(shè)置為一個(gè)數(shù)字,jCanvas默認(rèn)為像素。另外,你也可以使用pt,但是在這種情況下,你需要用引號將屬性值包括起來
fontFamily:允許你指定您的文字圖像的字體:'Verdana, sans-serif'。
這里的示例代碼:
$myCanvas.drawText({
text: 'Canvas is fun',
fontFamily: 'cursive',
fontSize: 40,
x: 290, y: 150,
fillStyle: 'lightblue',
strokeStyle: 'blue',
strokeWidth: 1
});
在瀏覽器中將是這樣的效果:
HTML:
<h2>jCanvas example: Drawing text</h2>
<canvas id="myCanvas" width="600" height="300">
<p>This is fallback content for users of assistive technologies or of browsers that don't have full support for the Canvas API.</p>
</canvas>
CSS:
body {
text-align: center;
}
canvas {
margin: auto;
display: block;
}
JS:
// Store the canvas object into a variable
var $myCanvas=$('#myCanvas');
$myCanvas.drawText({
text: 'jCanvas is fun',
fontFamily: 'cursive',
fontSize: 40,
x: 290, y: 150,
fillStyle: 'lightblue',
strokeStyle: 'blue',
strokeWidth: 1
});
Result:
jCanvas example: Drawing text
繪制圖片
你可以使用drawImage()方法來導(dǎo)入和處理圖片。下面是一個(gè)例子:
$myCanvas.drawImage({
source: 'imgs/cat.jpg',
x: 250, y: 100,
fromCenter: false,
shadowColor: '#222',
shadowBlur: 3,
rotate: 40
});
這是上面代碼的呈現(xiàn)方式:
HTML:
<h2>jCanvas example: Importing and manipulating an image</h2>
<canvas id="myCanvas" width="600" height="300">
<p>This is fallback content for users of assistive technologies or of browsers that don't have full support for the Canvas API.</p>
</canvas>
CSS:
body {
text-align: center;
}
canvas {
margin: auto;
display: block;
}
JS:
// Store the canvas object into a variable
var $myCanvas=$('#myCanvas');
$myCanvas.drawImage({
source: 'https://s3-us-west-2.amazonaws.com/s.cdpn.io/123941/cat.jpg',
x: 250, y: 100,
fromCenter: false,
shadowColor: '#222',
shadowBlur: 3,
rotate: 40
});
Result:
jCanvas example: Importing and manipulating an image
你可以隨便的改變上面示例的代碼,戳這里:CodePen demo(http://codepen.io/SitePoint/pen/ZQoWQM )更多跳轉(zhuǎn),詳見MaxLeap博客原文
Canvas層
如果你曾經(jīng)使用過,如Photoshop或Gimp圖像編輯器類的應(yīng)用程序,你可能會對圖層有所了解,使用圖層最爽的地方在于,你可以在畫布上控制每個(gè)圖像。
jCanvas提供了一個(gè)功能強(qiáng)大的API,基于你的畫布增加了靈活性。
這里介紹了如何使用jCanvas的層。
添加圖層
你只能在每一個(gè)層上繪制一個(gè)對象。在你的jCanvas項(xiàng)目中你有兩種添加圖層的方式:
使用 addLayer()方法,其次是drawLayers()方法
在任何的繪制方法里設(shè)置layer屬性的值為true
下面是如何運(yùn)用第一種技術(shù)來繪制一個(gè)藍(lán)色矩形:
$myCanvas.addLayer({
type: 'rectangle',
fillStyle: 'steelblue',
fromCenter: false,
name: 'blueRectangle',
x: 50, y: 50,
width: 400, height: 200
}).drawLayers();
HTML:
<h2>jCanvas example: Drawing a rectangle with addLayer()</h2>
<canvas id="myCanvas" width="600" height="300">
<p>This is fallback content for users of assistive technologies or of browsers that don't have full support for the Canvas API.</p>
</canvas>
CSS:
body {
text-align: center;
}
canvas {
margin: auto;
display: block;
}
JS:
// Store the canvas object into a variable
var $myCanvas=$('#myCanvas');
$myCanvas.addLayer({
type: 'rectangle',
fillStyle: 'steelblue',
fromCenter: false,
name: 'blueRectangle',
x: 50, y: 50,
width: 400, height: 200
}).drawLayers();
Result:
這里是你如何得到同樣矩形的第二種方法:
$myCanvas.drawRect({
fillStyle: 'steelblue',
layer: true,
name: 'blueRectangle',
fromCenter: false,
x: 50, y: 50,
width: 400, height: 200
});
HTML:
<h2>jCanvas example: Using drawing method with layer set to "true"</h2>
<canvas id="myCanvas" width="600" height="300">
<p>This is fallback content for users of assistive technologies or of browsers that don't have full support for the Canvas API.</p>
</canvas>
CSS:
body {
text-align: center;
}
canvas {
margin: auto;
display: block;
}
JS:
// Store the canvas object into a variable
var $myCanvas=$('#myCanvas');
$myCanvas.drawRect({
fillStyle: 'steelblue',
layer: true,
name: 'blueRectangle',
fromCenter: false,
x: 50, y: 50,
width: 400, height: 200
});
Result:
正如你所看到的,上面的兩種方法,我們得到了相同的結(jié)果。
最重要的一點(diǎn)是在上面兩個(gè)代碼樣本中可以發(fā)現(xiàn),上面的層你通過name設(shè)置的一個(gè)名稱。這使得他易于參照本層的代碼做出各種炫酷的東西,像改變其索引值,動畫,刪除等等。
讓我們看看如何能夠做到這一點(diǎn)。
動畫層
你可以使用jCanvas的 animateLayer()方法,快速的在你的基礎(chǔ)圖層上添加動畫,此方法接受以下參數(shù):
該層的 index 或者 name
具有鍵值對的動畫對象
以毫秒為單位的動畫時(shí)長(duration)。這是個(gè)默認(rèn)的參數(shù),如果不設(shè)置,默認(rèn)為400
動畫的運(yùn)動方式(easing )。這也是一個(gè)可選的參數(shù),如果不設(shè)置,則默認(rèn)為搖擺
動畫完成之后的回調(diào)函數(shù)(callback),也是可選的。
讓我們來看一下animateLayer() 方法的效果,我們將在一個(gè)層上繪制一個(gè)半透明的橙色圓圈,然后設(shè)置動畫的位置,顏色以及透明度屬性:
// Draw circle
$myCanvas.drawArc({
name: 'orangeCircle',
layer: true,
x: 50, y: 50,
radius: 100,
fillStyle: 'orange',
opacity: 0.5
});
// Animate the circle layer
$myCanvas.animateLayer('orangeCircle', {
x: 150, y: 150,
radius: 50,
}, 1000, function(layer) { // Callback function
$(this).animateLayer(layer, {
fillStyle: 'darkred',
x: 250, y: 100,
opacity: 1
}, 'slow', 'ease-in-out');
});
看一下下面例子中的動畫:
HTML:
<h2>jCanvas example: Animating Layers</h2>
<canvas id="myCanvas" width="600" height="300">
<p>This is fallback content for users of assistive technologies or of browsers that don't have full support for the Canvas API.</p>
</canvas>
CSS:
body {
text-align: center;
}
canvas {
margin: auto;
display: block;
}
JS:
// Store the canvas object into a variable
var $myCanvas=$('#myCanvas');
// Draw circle
$myCanvas.drawArc({
name: 'orangeCircle',
layer: true,
x: 50, y: 50,
radius: 100,
fillStyle: 'orange',
opacity: 0.5
});
// Animate the circle layer
$myCanvas.animateLayer('orangeCircle', {
x: 150, y: 150,
radius: 50,
}, 1000, function(layer) { // Callback function
$(this).animateLayer(layer, {
fillStyle: 'darkred',
x: 250, y: 100,
opacity: 1
}, 'slow', 'ease-in-out');
});
Result:
jCanvas example: Animating Layers
可拖動圖層
我想提醒你注意的是它還有一個(gè)很酷的功能,你可以在可拖動層里設(shè)置draggable屬性和layer 屬性的值為true,就可以將一個(gè)普通的jCanvas層變成可拖動的層了。
具體方法如下:
$myCanvas.drawRect({
layer: true,
draggable: true,
bringToFront: true,
name: 'blueSquare',
fillStyle: 'steelblue',
x: 250, y: 150,
width: 100, height: 100,
rotate: 80,
shadowX: -1, shadowY: 8,
shadowBlur: 2,
shadowColor: 'rgba(0, 0, 0, 0.8)'
})
.drawRect({
layer: true,
draggable: true,
bringToFront: true,
name: 'redSquare',
fillStyle: 'red',
x: 190, y: 100,
width: 100, height: 100,
rotate: 130,
shadowX: -2, shadowY: 5,
shadowBlur: 3,
shadowColor: 'rgba(0, 0, 0, 0.5)'
});
在上面的代碼段中,通過把屬性draggable設(shè)置為true,繪制出了兩個(gè)可拖動的矩形層。此外,請小心使用bringToFront屬性,以確保當(dāng)你拖動層時(shí),他會被自動拖到所有其他現(xiàn)有的圖層的前面。
最后,在上述代碼段中添加旋轉(zhuǎn)圖層的代碼并且設(shè)置一個(gè)盒子陰影,只是為了告訴你如何快速的在你的jCanvas圖紙上添加一些特效。
結(jié)果會是這樣的:
如果你想在在你拖動圖層之前,之間或者之后做一些事情的話,jCanvas 可以很容易的利用相關(guān)的回調(diào)函數(shù)來實(shí)現(xiàn)這一點(diǎn):
dragstart:當(dāng)你開始拖動圖層的時(shí)候的觸發(fā)器
drag:當(dāng)你正在拖動圖層時(shí)發(fā)生
dragstop:當(dāng)你停止拖動圖層時(shí)的觸發(fā)器
dragcancel:當(dāng)你拖動的圖層到了畫布表面的邊界時(shí)發(fā)生
比方說,當(dāng)用戶完成拖動層之后,你想在頁面上顯示一條消息,你可以通過添加一個(gè)回調(diào)函數(shù)dragstop來實(shí)現(xiàn),就像這樣:
$myCanvas.drawRect({
layer: true,
// Rest of the code as shown above...
// Callback function
dragstop: function(layer) {
var layerName=layer.name;
el.innerHTML='The ' + layerName + ' layer has been dropped.';
}
})
.drawRect({
layer: true,
// Rest of the code...
// Callback function
dragstop: function(layer) {
var layerName=layer.name;
el.innerHTML='The ' + layerName + ' layer has been dropped.';
}
});
結(jié)論
在這篇文章中,我向你介紹了jCanvas,一個(gè)新的基于jQuery能與HTML5的 Canvas API一起使用的庫。我已經(jīng)簡單的介紹了一些jCanvas的屬性和方法,能夠讓你快速的在畫布和是哪個(gè)繪制圖形,增加視覺效果,動畫和拖動圖層。
你可以訪問jCanvas文檔,這里有很多的詳細(xì)指導(dǎo)和示例。你要可以在 jCanvas網(wǎng)站的 sandbox上進(jìn)行快速測試。
責(zé)編:外鏈不支持跳轉(zhuǎn),為版面美觀沒有添加跳轉(zhuǎn)鏈接,需要訪問jCanvas文檔、sandbox等信息者,請至中文翻譯鏈接觀看
?――――――END――――――?
相關(guān)閱讀
無需FLASH實(shí)現(xiàn)圖片裁剪——HTML5中級進(jìn)階
?――――――――――――――?
譯者往期佳作
如何結(jié)合Gulp使用PostCss
?――――――――――――――?
作者信息
原文作者:Maria Antonietta Perna
原文鏈接:http://t.cn/Rt82jVj
翻譯自力譜宿云 LeapCloud旗下MaxLeap團(tuán)隊(duì)_前端研發(fā)人員:Ammie白
中文翻譯首發(fā):https://blog.maxleap.cn/archives/1071
譯者簡介:新晉前端一枚,目前負(fù)責(zé) MaxLeap 網(wǎng)站展示性內(nèi)容的實(shí)現(xiàn)。喜歡自己嘗試寫一些js特效小Demo。
對技術(shù)干貨/活動有興趣的各位小伙伴,歡迎關(guān)注我們的微信公眾號:MaxLeap_yidongyanfa
活動預(yù)告:
報(bào)名鏈接:http://t.cn/Rt9ooRw
天晚間,微信團(tuán)隊(duì)發(fā)布公告,微信瀏覽器全面升級至X5 Blink內(nèi)核,并支持遠(yuǎn)程調(diào)試。
“微信安卓客戶端 webview 即日起100%放量,全面升級至 X5 Blink 內(nèi)核,將具有更好的 HTML5/CSS3 支持,更強(qiáng)大的渲染能力。同時(shí),微信 web 開發(fā)者工具同步推出0.5.0版本,新增支持實(shí)時(shí)映射手機(jī)屏幕到 PC 或者 Mac 上,可以遠(yuǎn)程調(diào)試 X5 Blink 內(nèi)核上的網(wǎng)頁。”
簡單的說來,本次全面升級意味著,微信將全方位支持H5標(biāo)準(zhǔn),這能讓移動瀏覽器實(shí)現(xiàn)從前原生APP才能實(shí)現(xiàn)的效果,包括應(yīng)用、游戲等。
同時(shí),新增的PC和Mac端支持,也讓web開發(fā)者的工作效率有了一個(gè)質(zhì)的提升。這無疑是微信在為開發(fā)者大規(guī)模進(jìn)入瀏覽器生態(tài)大亮綠燈。
“大棒+糖果”政策,微信到底想借H5做什么文章?
微信此次熱情的擁抱HTML5,不禁讓筆者聯(lián)想起幾天之前微信面對H5外鏈那張冰冷的面孔。4月12日頒發(fā)的《微信外鏈規(guī)范》,其中明文禁止了HTML5小游戲及測試類內(nèi)容:
“以游戲、測試等方式,吸引用戶參與互動的,具體形式包括但不限于比手速、好友問答、性格測試,測試簽、網(wǎng)頁小游戲等;若內(nèi)容中包含以上情況,一經(jīng)發(fā)現(xiàn),立即停止鏈接內(nèi)容在朋友圈繼續(xù)傳播、停止對相關(guān)域名或 IP 地址進(jìn)行的訪問?!?/p>
微信以不可辯駁的姿態(tài)畫下一條紅線,一時(shí)之間,H5游戲行業(yè)內(nèi)一片肅殺。毫無疑問,微信對H5小游戲當(dāng)頭一棒,幾乎徹底封殺了H5小游戲公司和營銷企業(yè)在朋友圈的流量空間。
一手緊握大棒,一手捧著糖果,我們不禁要問:微信到底借對H5做什么文章?
淘汰H5落后產(chǎn)能,微信欲借H5打造系統(tǒng)級生態(tài)
截止2015年底,HTML5游戲數(shù)量超過3000款,在已上線的H5游戲中,制作簡單、易于傳播的休閑益智類小游戲占比達(dá)到75.10%,其次是角色扮演類、動作冒險(xiǎn)類游戲,占比分別為9.22%和6.04%?!?/p>
這樣一組數(shù)字告訴我們,至少半數(shù)以上的H5游戲?qū)儆谛袠I(yè)內(nèi)的“落后產(chǎn)能”,在《規(guī)范》之后,它們將遭遇滅頂之災(zāi)。
微信“規(guī)范”的方式畫下紅線,目的很明確:淘汰H5的弱勢粗濫產(chǎn)能,避免因H5導(dǎo)致的過渡營銷化。
據(jù)二爺了解,微信瀏覽器此前一直在調(diào)用QQ瀏覽器內(nèi)核,本次升級到X5 Bink內(nèi)核,完成了對H5的全方位支持。此舉將帶來如下一些實(shí)質(zhì)性的改變:
1、實(shí)現(xiàn)瀏覽器性能革命性提升,使H5內(nèi)容可以基本媲美原生APP的體驗(yàn)(此前HTML5之所以發(fā)展坎坷曲折,很大原因便是瀏覽器廠商支持不力);
2、同時(shí)推出瀏覽器開發(fā)的一整套PC端高效率的開發(fā)工具,同時(shí)對接硬件和數(shù)據(jù)的能力大幅度增強(qiáng),這使得微信將進(jìn)入開發(fā)者時(shí)代,真正具備了一個(gè)系統(tǒng)級生態(tài)應(yīng)有的開發(fā)能力。
3、將為廣告、動畫、游戲、視頻等領(lǐng)域的交互體驗(yàn)帶來大幅度提升。
很顯然,上述改變直接指向了兩個(gè)重要方向,一是重度化、精品化的H5游戲,另一個(gè)便是微信在年初即開始造勢的應(yīng)用號。微信還是將生態(tài)的打造和商業(yè)化的實(shí)現(xiàn)押寶在HTML5之上,但它們并不希望落后的、過度營銷化的H5產(chǎn)能砸壞了這塊牌子。
目前來看,微信至少已經(jīng)從H5技術(shù)上大幅度推進(jìn)了其系統(tǒng)級生態(tài)的步伐,借H5打造系統(tǒng)級生態(tài)的意圖昭然若揭。其最終成敗,將取決于應(yīng)用號、游戲、廣告、視頻等內(nèi)容層面是否能夠跟進(jìn)。
H5重度游戲或成微信商業(yè)化關(guān)鍵一步
去年下半年以來,H5游戲不斷的突破原來網(wǎng)頁小游戲的藩籬,到今年3月,像《傳奇世界H5》這樣的精品游戲,月入已高達(dá)到2000萬。從這些爆款的表現(xiàn)來看,H5游戲完全可以憑借重度投入,走上精品化制作,大規(guī)模盈利的道路。
基于白鷺引擎開發(fā)的重度HTML5游戲截圖
在原生手游發(fā)展進(jìn)入一個(gè)瓶頸期的情況下,H5為行業(yè)帶來了更多的玩法:翻熱經(jīng)典IP,原生+H5并行、Web+VR。不過對整個(gè)H5游戲行業(yè)而言,行業(yè)雖熱,但定性不足,夠真正靜下心來做運(yùn)營的廠商太少,這也是為什么H5游戲即便制作水準(zhǔn)已經(jīng)可以媲美原生手游之后,仍然遲遲未能很好的獲得用戶黏性的原因。
在IGBC大會上白鷺時(shí)代CEO陳書藝曾指出H5行業(yè)內(nèi)的“換皮之風(fēng)”和浮躁風(fēng)氣,他認(rèn)為將國外成功游戲換一張中國皮,投入市場博運(yùn)氣賺快錢,以及給游戲產(chǎn)品貼上IP、VR等熱點(diǎn)標(biāo)簽,借此炒作,是行業(yè)浮躁的一種表現(xiàn)。手游需要重新回到價(jià)值實(shí)現(xiàn)的本質(zhì)上,而H5游戲可以通過其跨平臺、多渠道、重社交互動的屬性,為游戲用戶帶來真正的價(jià)值。
目前,HTML5游戲的崛起,已經(jīng)為手游價(jià)值的實(shí)現(xiàn)開辟了一條新的道路。HTML5游戲可實(shí)現(xiàn)跨平臺操作,多渠道推廣,體驗(yàn)也開始媲美原生游戲。而原生游戲依然有其固有的優(yōu)勢,它能穩(wěn)定用戶,并在大基數(shù)的客戶群中發(fā)酵散布,形成穩(wěn)定的收入。在未來,一款成功的手游可能會依賴這兩種版本相互支撐發(fā)力,基于自身優(yōu)勢提升玩家體驗(yàn),回歸游戲的初心。
目前,H5重度游戲的開發(fā)已經(jīng)突破了技術(shù)上的障礙。比如目前占市場比例70%的白鷺引擎,已為游戲CP打造出可媲美原生的一站式技術(shù)解決方案,也推出了3D版的引擎,白鷺加速器也植入了超4億臺移動設(shè)備。目前行業(yè)真正的問題,主要還是在于現(xiàn)有的渠道資源如何對H5游戲的CP開放,讓H5精品游戲更充分的擁抱市場,釋放潛力。畢竟,H5游戲還不像原生手游那樣,有一套非常成熟而龐大的分發(fā)機(jī)制。
HTML5游戲發(fā)展歷程,數(shù)據(jù)來源:白鷺開放平臺
在這個(gè)問題上,作為與游戲CP利益緊密捆綁的引擎廠家,白鷺時(shí)代等技術(shù)企業(yè)已經(jīng)率先嘗試為CP推出一站式服務(wù),集成上下游開發(fā)服務(wù)和多家分發(fā)渠道。但微信此次升級瀏覽器的動作,攜七八億的月活躍流量強(qiáng)殺殺來,無疑更能讓行業(yè)尖叫。
在未來,H5游戲可能不會再像從前來樣在朋友圈無底線,無節(jié)操的肆意傳播。但微信必定會為其開辟專區(qū),穩(wěn)定的增加流量,形成和一個(gè)成熟的分發(fā)機(jī)制。H5游戲不再需要有上頓沒下頓的打游擊,而微信也將憑借其社交屬性和瀏覽器優(yōu)勢,牢牢的占據(jù)H5游戲的分發(fā)高地,進(jìn)而加重騰訊系在移動游戲領(lǐng)域的砝碼,借H5游戲這股熱潮上走出微信商業(yè)化的關(guān)鍵一步。
H5價(jià)值不止游戲,或掀移動應(yīng)用、視頻等多行業(yè)洗牌
雖然此次微信瀏覽器的升級,對H5游戲來說是個(gè)重大利好,但它帶來的影響可能遠(yuǎn)不止于游戲,更多的移動行業(yè)將逐次的受到影響、推進(jìn)變革:
第一步,輕度的H5小游戲被淘汰,中小CP轉(zhuǎn)型or轉(zhuǎn)行;
第二步,重度化H5游戲迎來大發(fā)展,行業(yè)出現(xiàn)兩極分化,巨頭顯示雛形;
第三步,微信應(yīng)用號上線,H5會讓眾多O2O、新聞媒體、社交等領(lǐng)域的移動應(yīng)用向?yàn)g覽器靠攏,依附在微信生態(tài)的旗幟之下。
第四步,H5技術(shù)蔓延發(fā)展到視頻、動畫、廣告、VR等多個(gè)領(lǐng)域。大部分我們?nèi)粘J褂玫降腁PP服務(wù),或許都可以在微信生態(tài)內(nèi)直接用瀏覽器解決。
HTML5應(yīng)用場景
毫無疑問,微信應(yīng)用號將讓移動互聯(lián)網(wǎng)多個(gè)領(lǐng)域的洗牌更加激烈。不過H5在前些年,也曾屢次掀起過改變行業(yè)的高潮理想。這一次H5的價(jià)值能否真正的實(shí)現(xiàn),這取決于眾多巨頭們能否用確實(shí)在用H5的先進(jìn)性去改變移動產(chǎn)品的體驗(yàn),提升行業(yè)的效率,而非借H5概念去包裝熱炒某些無法新增實(shí)際價(jià)值的產(chǎn)品。能否堅(jiān)持這一點(diǎn),將決定H5和Web應(yīng)用的未來。
*請認(rèn)真填寫需求信息,我們會在24小時(shí)內(nèi)與您取得聯(lián)系。