数据时代来临,品牌都知道它们的消费者在“网”上,但他们到底在哪里?每个公司都知道应该把广告打在社交网络里,但如何才能找到这些“人”?人们最爱在新媒体社交平台上分享什么样的内容?...今天O2O君整理了一篇用数据来说明这一切的干货文章供各位小伙伴学习!这些数据包含但不局限微信与朋友圈哦!
为了了解社交媒体内容投放的准确性和效果,致力于数字内容营销的公关公司Fractl邀请 BuzzStream对其去年6月至11月在11个垂直行业发布的22万篇文章进行了分析,并得出结果。这是一份告诉你发布什么类型内容、什么时间发布内容的建议报告,我们做了一个简单的梳理,也许对你有用:
首先,人们最爱在新媒体社交平台上分享什么样的内容?下面这几种类型的内容被证明是“只要内容不太差就不会出错”的:
生活小技能类型(How-to)
如何做好吃的米饭?如何写简历?如何打包行李?如何装修餐厅?这种类型内容的转发量占到总比的 18.42%。
清单类型(Lists)
15本好书。8条欧洲自驾经典路线。10杯拿铁。5碗鳗鱼饭。(貌似最近国内也出来一批专门做这个细分内容的)。这部分内容在六个月的调查中呈现出最好的分享效果,占到22.45%的比例。
比较类型(What-posts)
大师的作息(对比你的作息,你觉得你成功的几率有几分)。伦敦的书店(对比你在的城市,文化的气息是不是瞬间弱掉了)。但这种方式的风险看起来比较大,变化会呈现13.45%的差异,而且17.88%的比例排名最低。
讨论类型(Why-posts)
生还是不生二胎?用不用HTML5?这部分的内容也有很好的社交粘性,占到22.32%比例,仅次于清单类型内容,这两种内容在分析中得出,在每个垂直行业,平均每月的转发量都在21000个左右,并且浮动低于2.5% 。
视频(Video)
很简单,以影片的形式来呈现内容。占到总分享比例的 18.94% ,而且在第四季度明显提升。
其次,每个行业领域中的内容传播各不相同,那么哪种内容适合什么行业呢?同时,研究还抓取了每个行业中20个网站,分析内容发布时间和相关内容的数据,得出内容领域的受关注程度,虽然每个月的结果差距不是很大(差异低于10% )。
旅游
清单形式是旅游内容中最占优势的,尤其当你的读者想要出发的时候,需要可以去哪些地方的清单,需要行李打包的清单,等等。旅游内容32% 的转发量是清单类内容。从社交粘性上看,旅游内容的转发量位列第三。
教育
在旅游内容中表现出众的清单内容,在教育领域里就不那么凑效了,相应的转发量只占10%。7 月是教育类内容的低谷期,因为学校放假的原因,转发量只占10.57% 。
科技
科技内容分享会在年底呈现井喷,因为大家都在考虑为最新的智能产品买单了。
汽车
How-to类型的内容在汽车领域最受欢迎,因为大家都有一些专业性很强的问题需要解决。
美食
美食类的内容中,How-to同样表现优秀,转发量占总比37%,正如上面的举例,如何做好米饭,或者做只火鸡,越来越多的人开始回归家庭,寻找做饭的乐趣和仪式感(也是因为许多餐厅的食品安全和卫生没有保障吧)。但食品内容的社交粘性并不高,少于2500的转发量每月。
新闻
社交粘性最高的是新闻类内容,每个月基本上都保持28000的转发量以上。这些内容其实是很多行业内容的集合和精华。
娱乐
社交粘性位居第二,每月17000以上的转发量。
商业
商业内容和金融、生活方式、技术、教育的社交粘性都在转发量5000 至9000 ,但商业内容数据呈现出的方差很小,证明这部分读者的忠诚度非常高。
朋友圈广告的那些大数据
品牌都知道它们的消费者在“网”上,但他们到底在哪里?每个公司都知道应该把广告打在社交网络里,但如何才能找到那些“合适的人”?
作为微信朋友圈首发广告主之一,对于此次想要抵达的用户群,他们对于用户地域、年龄、手机系统、性别和上网环境做了一些设定,“但我们这次其实是第一次尝试大的分类原则,就像电视广告一样,看到宝马广告的不一定就是这个广告的目标受众。这次主要是希望把品牌最基本的理念进行传播,而不是具体到想把某款车型推送给某些人。”
也许这一次宝马并没有找到真正的消费者,但这却让他们得到了足够多的曝光率。根据宝马提供的数据,从25日20:45首发到次日中午12 点整,第一批有4600万人可以直接看到,用户点击Logo、点赞、评论等互动行为有700万,宝马官微的粉丝数增加了20万。
与宝马同一时间出现在朋友圈的,还有可口可乐和智能手机vivo。同样是广告内嵌到用户信息流当中,有文字和图片构成,可附链接点击进入完整Html5界面。很多人压根都没有看广告到底长什么样,就迅速截屏分享,结果是在很多人都没有看到真正的广告时,已经被二手广告刷屏了。
有趣的是,一条“鄙视链”也迅疾搭建完毕:刷到宝马广告的“鄙视”刷到 vivo的,刷到 vivo的“鄙视”刷到可口可乐的,什么都没刷到的最后连自己都“呵呵”了。
这条“鄙视链”的形成则是因为流传出的微信筛选原则。据说微信朋友圈广告是基于大数据分析,年收入100 万以上,收到的是宝马广告;买不起iPhone但买得起小米的收到的是vivo广告,连小米甚至红米都买不起的,收到的将会是可口可乐的广告。
最后大家知道了,这并不可信,很多还没有任何收入的大学生都被推送了宝马的广告,你也大可不必用iPhone疯狂自拍以正身价。它还是说明了微信朋友圈的影响力足够大,让人们对微信有了一个新的想象空间。
对于广告价格也有不少猜测。目前曝光的一份名为《微信广告系统介绍》的内部PPT显示,微信朋友圈广告采取CPM方式售卖,不同区域每千次曝光收取40-140元不等。如果要加入性别定向,就再乘以一个1.1的系数。Html5 外链要加价20%。若以2亿左右的展示量计算,单次投放费用在800万以上。如果再算上链接、区域定向,网上传播的1000万以上的合作费用是比较可信的。
这未必是真的,但广告价格可能确实不菲。“如果仅仅从曝光的角度,也就是CPM,来和一般的展示广告相比的话,那换算出来的价格也就会比一般的展示型广告要高。但如果跟视频广告拿来比,那就又比一般的视频广告(价格)来的低。但是从制造话题的角度来看,它还有很多边际效应。这个话题的制造,并非一般广告所能比的。
综合起来看,包括效益、话题的话,品牌方是会肯定这一次传播的价值的。”首发的新鲜感是不可复制的,当朋友圈广告成为常态之后,广告主需要考虑如何让用户不会视而不见。“广告需要有趣起来,需要有创意起来,品牌不能只把微信当做一种硬广资源,这样会引起消费者的反感。”熊超说。
“如果客户需要创造一波在涵盖度上有要求的campaign的话,微信还是一个很有价值的媒介渠道。但是客户如果看中的是广告的转换度的话,它的价值如何就需要跟一般的广告效果对比,再来做评估了。需要根据客户的投放目的来选择。” 陈良怡说。
可口可乐中国表示,对于朋友圈广告这一全新的媒介应用,会进一步观察和评估,现在也看到网络上就投放的目标用户方面有很多的调侃和臆测。品牌有可能会变得更谨慎。
从赚眼球的角度说,性价比最高的可能是vivo的广告,它夹在宝马和可口可乐两大超级品牌之间,广告传播效果非常惊人,根据腾讯官方公开的数据,同时间段上线的广告在次日上午9点整,总曝光量接近1.55 亿,用户点击“vivo 智能手机”logo、点赞、评论等行为超过720万次,vivo官微增加粉丝22万。从百度搜索指数来看,vivo也增长更明显。
对于微信来说,消费者是觉得可以接受还是会不胜其扰,要看微信如何在设定他们的广告规则,这个规则对于广告主来说也很重要,微信到底是一时的新欢,还是具有长期的价值,都取决于此。它将面对商业利益和用户体验的挑战。
—END —
餐饮O2O(微信ID:coffeeo2o):中国餐饮业线上线下互动营销的圈子,每天分享餐饮案例、营销干货!用创新商业模式和互联网思维改良传统行业,是餐饮老板与从业人员必关注的公众平台。WeMedia联盟成员。
加入餐英圈或寻求采访报道请联系微信:canyinjun
TML5 可以直接在你的网页中使用 <canvas> 元素及其相关的 JavaScript API绘制的图形。
在这篇文章中,我将向你介绍 jCanvas,一个基于 jQuery的免费且开源的 HTML5的Canvas API。
如果你使用 jQuery 进行开发,jCanvas能够使用 jQuery更简单,更快速的完成一些非常炫酷的 canvas画布及交互效果。
什么是 jCanvas ?
jCanvas 官网是这样解释的:
“ 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来实现,甚至可以做更多的事情。如果你愿意的话,你也可以将原生的Canvas API方法和 jCanvas一起使用。draw()方法就可以这样使用。此外,你还可以非常轻松的用自己的方法结合 extend()函数来扩展jCanvas的功能。
添加jCanvas 到你的项目中
将jCanavs添加在你的项目中,从官方网站或GitHub的页面上下载脚本,然后将脚本文件放在你的项目文件夹中。正如前面说的,jCanvas需要依赖 jQuery才能正常工作,所以还要确保引入了 jQuery文件。
项目的脚本文件将是这个样子:
<script src="js/jquery.min.js></script>
<script src="js/jcanvas.min.js></script>
<script src="js/script.js></script>
最后,引入你自己的JavaScript 代码文件。现在,让我们开始jCanvas之旅吧。
设置 HTML文档
我们通过为 HTMl5文档添加一个<canvas>标签,来开始我们的示例。
<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>
以下是关于上面的代码片段的几点说明。
默认情况下,<canvas>的尺寸300px x 150px,你可以在width 和 height 属性里修改默认的大小。
id属性不是必须添加的,但是确是 JavaScript访问该元素的最简单的方法。
在<canvas>元素中的内容只是位图,这使得它无法被使用辅助技术的用户访问。另外,对不支持 Canvas API的浏览器,将不能够访问其内容或者任何方式的交互。因此,该技术旨在让<canvas>更容易被支持。
如果你想使用原生的Canvas API,你的 JavaScript 代码将会这样的:
var canvas=document.getElementById('myCanvas'),
context=canvas.getContext('2d');
上述代码中的context变量存储了Canvas对象的一个2D上下文属性。正是这种特性,使得你可以访问 HTML5的 Canvas API提供的所有其他属性和方法。
如果你想了解的更多,你可以戳这里HTML5 Canvas 简介。
jCanvas的方法和属性已经包含了2D上下文的引用,因此你可以直接的跳到绘制图片。
用jCanvas绘制一些图形
大多数的 jCanvas方法,接受键值对的形式,因此你可以根据你的需要,或你喜欢的顺序去使用它们。
让我们从绘制一个矩形开始吧。
矩形
下面是你怎样用 jCanvas对象的 drawRect() 方法绘制出一个矩形的方法。
// 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对象到一个名为$myCanvas的变量中。里面的drawRect()方法的属性都是比较简单的,但是我们在这里简单的阐述一下:
fillStyle 设置矩形的背景色;
strokeStyle 设置它的边框颜色;
strokeWidth 设置矩形的边框宽度;
x 和 y设置对应矩形的坐标的水平和垂直的画布内测的位置。顶点的0值的分别为 x和y,也就是说,(0,0),对应于画布的左上角。x坐标向右增大,y坐标朝向画布的底部增加。默认情况下,jCanvas会以矩形的中心点作为x和y坐标的值;
要想改变这一点,以便x和y对应矩形的左上角,可以将fromCenter属性的值设置为 false;
最后,通过宽度和高度属性设置矩形的尺寸。
下面是矩形的示例代码:
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
圆弧和圆
弧是一个圆的边缘部分。对于jCanvas来说,画一个圆弧仅仅是在 drawArc() 方法里设置几个所需的属性:
$myCanvas.drawArc({
strokeStyle: 'steelblue',
strokeStyle: 'blue',
strokeWidth: 4,
x: 300, y: 100,
radius: 50,
// start and end angles in degrees
start: 0, end: 200
});
绘制弧形,需要设置半径属性的值,以及开始的角度和结束的角度。如果你希望弧形是逆时针方向的话,需要添加一个ccw属性,并将其属性值设置为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
绘制一个圆形:
举例来说,下面是如何只使用圆弧形状来绘制出一个简单的笑脸图形:
$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的链式操作一样,在jCanvas中也可以使用链式操作。
下面是以上代码在浏览器中的效果:
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()方法快速的绘制直线,或者定义一系列的线条的连接点。
$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
});
上面代码设置了 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()方法设置 x 和 y值,你还需要制定你要绘制的路径的类型,例如直线,圆弧等。
下面教你如何使用 drawPath()方法和drawarrows()方法画出一对水平和垂直方向的箭头,后者是一个非常好用的jCanvas方法,能够使你快速的在画布上绘制一个箭头形状:
$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
}
});
结果展示:
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()方法快速的绘制出你需要的文字,这个方法的主要的功能:
text:将此属性设置为你想要显示在画布上的文字内容:例如:‘Hello World’
fontsize:此属性的值决定了在画布上的文字的大小。你可以为这个属性设置为一个数字,jCanvas默认为像素。另外,你也可以使用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()方法来导入和处理图片。下面是一个例子:
$myCanvas.drawImage({
source: 'imgs/cat.jpg',
x: 250, y: 100,
fromCenter: false,
shadowColor: '#222',
shadowBlur: 3,
rotate: 40
});
这是上面代码的呈现方式:
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 )更多跳转,详见MaxLeap博客原文
Canvas层
如果你曾经使用过,如Photoshop或Gimp图像编辑器类的应用程序,你可能会对图层有所了解,使用图层最爽的地方在于,你可以在画布上控制每个图像。
jCanvas提供了一个功能强大的API,基于你的画布增加了灵活性。
这里介绍了如何使用jCanvas的层。
添加图层
你只能在每一个层上绘制一个对象。在你的jCanvas项目中你有两种添加图层的方式:
使用 addLayer()方法,其次是drawLayers()方法
在任何的绘制方法里设置layer属性的值为true
下面是如何运用第一种技术来绘制一个蓝色矩形:
$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:
正如你所看到的,上面的两种方法,我们得到了相同的结果。
最重要的一点是在上面两个代码样本中可以发现,上面的层你通过name设置的一个名称。这使得他易于参照本层的代码做出各种炫酷的东西,像改变其索引值,动画,删除等等。
让我们看看如何能够做到这一点。
动画层
你可以使用jCanvas的 animateLayer()方法,快速的在你的基础图层上添加动画,此方法接受以下参数:
该层的 index 或者 name
具有键值对的动画对象
以毫秒为单位的动画时长(duration)。这是个默认的参数,如果不设置,默认为400
动画的运动方式(easing )。这也是一个可选的参数,如果不设置,则默认为摇摆
动画完成之后的回调函数(callback),也是可选的。
让我们来看一下animateLayer() 方法的效果,我们将在一个层上绘制一个半透明的橙色圆圈,然后设置动画的位置,颜色以及透明度属性:
// 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
可拖动图层
我想提醒你注意的是它还有一个很酷的功能,你可以在可拖动层里设置draggable属性和layer 属性的值为true,就可以将一个普通的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设置为true,绘制出了两个可拖动的矩形层。此外,请小心使用bringToFront属性,以确保当你拖动层时,他会被自动拖到所有其他现有的图层的前面。
最后,在上述代码段中添加旋转图层的代码并且设置一个盒子阴影,只是为了告诉你如何快速的在你的jCanvas图纸上添加一些特效。
结果会是这样的:
如果你想在在你拖动图层之前,之间或者之后做一些事情的话,jCanvas 可以很容易的利用相关的回调函数来实现这一点:
dragstart:当你开始拖动图层的时候的触发器
drag:当你正在拖动图层时发生
dragstop:当你停止拖动图层时的触发器
dragcancel:当你拖动的图层到了画布表面的边界时发生
比方说,当用户完成拖动层之后,你想在页面上显示一条消息,你可以通过添加一个回调函数dragstop来实现,就像这样:
$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.';
}
});
结论
在这篇文章中,我向你介绍了jCanvas,一个新的基于jQuery能与HTML5的 Canvas API一起使用的库。我已经简单的介绍了一些jCanvas的属性和方法,能够让你快速的在画布和是哪个绘制图形,增加视觉效果,动画和拖动图层。
你可以访问jCanvas文档,这里有很多的详细指导和示例。你要可以在 jCanvas网站的 sandbox上进行快速测试。
责编:外链不支持跳转,为版面美观没有添加跳转链接,需要访问jCanvas文档、sandbox等信息者,请至中文翻译链接观看
?――――――END――――――?
相关阅读
无需FLASH实现图片裁剪——HTML5中级进阶
?――――――――――――――?
译者往期佳作
如何结合Gulp使用PostCss
?――――――――――――――?
作者信息
原文作者:Maria Antonietta Perna
原文链接:http://t.cn/Rt82jVj
翻译自力谱宿云 LeapCloud旗下MaxLeap团队_前端研发人员:Ammie白
中文翻译首发:https://blog.maxleap.cn/archives/1071
译者简介:新晋前端一枚,目前负责 MaxLeap 网站展示性内容的实现。喜欢自己尝试写一些js特效小Demo。
对技术干货/活动有兴趣的各位小伙伴,欢迎关注我们的微信公众号:MaxLeap_yidongyanfa
活动预告:
报名链接:http://t.cn/Rt9ooRw
天晚间,微信团队发布公告,微信浏览器全面升级至X5 Blink内核,并支持远程调试。
“微信安卓客户端 webview 即日起100%放量,全面升级至 X5 Blink 内核,将具有更好的 HTML5/CSS3 支持,更强大的渲染能力。同时,微信 web 开发者工具同步推出0.5.0版本,新增支持实时映射手机屏幕到 PC 或者 Mac 上,可以远程调试 X5 Blink 内核上的网页。”
简单的说来,本次全面升级意味着,微信将全方位支持H5标准,这能让移动浏览器实现从前原生APP才能实现的效果,包括应用、游戏等。
同时,新增的PC和Mac端支持,也让web开发者的工作效率有了一个质的提升。这无疑是微信在为开发者大规模进入浏览器生态大亮绿灯。
“大棒+糖果”政策,微信到底想借H5做什么文章?
微信此次热情的拥抱HTML5,不禁让笔者联想起几天之前微信面对H5外链那张冰冷的面孔。4月12日颁发的《微信外链规范》,其中明文禁止了HTML5小游戏及测试类内容:
“以游戏、测试等方式,吸引用户参与互动的,具体形式包括但不限于比手速、好友问答、性格测试,测试签、网页小游戏等;若内容中包含以上情况,一经发现,立即停止链接内容在朋友圈继续传播、停止对相关域名或 IP 地址进行的访问。”
微信以不可辩驳的姿态画下一条红线,一时之间,H5游戏行业内一片肃杀。毫无疑问,微信对H5小游戏当头一棒,几乎彻底封杀了H5小游戏公司和营销企业在朋友圈的流量空间。
一手紧握大棒,一手捧着糖果,我们不禁要问:微信到底借对H5做什么文章?
淘汰H5落后产能,微信欲借H5打造系统级生态
截止2015年底,HTML5游戏数量超过3000款,在已上线的H5游戏中,制作简单、易于传播的休闲益智类小游戏占比达到75.10%,其次是角色扮演类、动作冒险类游戏,占比分别为9.22%和6.04%。”
这样一组数字告诉我们,至少半数以上的H5游戏属于行业内的“落后产能”,在《规范》之后,它们将遭遇灭顶之灾。
微信“规范”的方式画下红线,目的很明确:淘汰H5的弱势粗滥产能,避免因H5导致的过渡营销化。
据二爷了解,微信浏览器此前一直在调用QQ浏览器内核,本次升级到X5 Bink内核,完成了对H5的全方位支持。此举将带来如下一些实质性的改变:
1、实现浏览器性能革命性提升,使H5内容可以基本媲美原生APP的体验(此前HTML5之所以发展坎坷曲折,很大原因便是浏览器厂商支持不力);
2、同时推出浏览器开发的一整套PC端高效率的开发工具,同时对接硬件和数据的能力大幅度增强,这使得微信将进入开发者时代,真正具备了一个系统级生态应有的开发能力。
3、将为广告、动画、游戏、视频等领域的交互体验带来大幅度提升。
很显然,上述改变直接指向了两个重要方向,一是重度化、精品化的H5游戏,另一个便是微信在年初即开始造势的应用号。微信还是将生态的打造和商业化的实现押宝在HTML5之上,但它们并不希望落后的、过度营销化的H5产能砸坏了这块牌子。
目前来看,微信至少已经从H5技术上大幅度推进了其系统级生态的步伐,借H5打造系统级生态的意图昭然若揭。其最终成败,将取决于应用号、游戏、广告、视频等内容层面是否能够跟进。
H5重度游戏或成微信商业化关键一步
去年下半年以来,H5游戏不断的突破原来网页小游戏的藩篱,到今年3月,像《传奇世界H5》这样的精品游戏,月入已高达到2000万。从这些爆款的表现来看,H5游戏完全可以凭借重度投入,走上精品化制作,大规模盈利的道路。
基于白鹭引擎开发的重度HTML5游戏截图
在原生手游发展进入一个瓶颈期的情况下,H5为行业带来了更多的玩法:翻热经典IP,原生+H5并行、Web+VR。不过对整个H5游戏行业而言,行业虽热,但定性不足,够真正静下心来做运营的厂商太少,这也是为什么H5游戏即便制作水准已经可以媲美原生手游之后,仍然迟迟未能很好的获得用户黏性的原因。
在IGBC大会上白鹭时代CEO陈书艺曾指出H5行业内的“换皮之风”和浮躁风气,他认为将国外成功游戏换一张中国皮,投入市场博运气赚快钱,以及给游戏产品贴上IP、VR等热点标签,借此炒作,是行业浮躁的一种表现。手游需要重新回到价值实现的本质上,而H5游戏可以通过其跨平台、多渠道、重社交互动的属性,为游戏用户带来真正的价值。
目前,HTML5游戏的崛起,已经为手游价值的实现开辟了一条新的道路。HTML5游戏可实现跨平台操作,多渠道推广,体验也开始媲美原生游戏。而原生游戏依然有其固有的优势,它能稳定用户,并在大基数的客户群中发酵散布,形成稳定的收入。在未来,一款成功的手游可能会依赖这两种版本相互支撑发力,基于自身优势提升玩家体验,回归游戏的初心。
目前,H5重度游戏的开发已经突破了技术上的障碍。比如目前占市场比例70%的白鹭引擎,已为游戏CP打造出可媲美原生的一站式技术解决方案,也推出了3D版的引擎,白鹭加速器也植入了超4亿台移动设备。目前行业真正的问题,主要还是在于现有的渠道资源如何对H5游戏的CP开放,让H5精品游戏更充分的拥抱市场,释放潜力。毕竟,H5游戏还不像原生手游那样,有一套非常成熟而庞大的分发机制。
HTML5游戏发展历程,数据来源:白鹭开放平台
在这个问题上,作为与游戏CP利益紧密捆绑的引擎厂家,白鹭时代等技术企业已经率先尝试为CP推出一站式服务,集成上下游开发服务和多家分发渠道。但微信此次升级浏览器的动作,携七八亿的月活跃流量强杀杀来,无疑更能让行业尖叫。
在未来,H5游戏可能不会再像从前来样在朋友圈无底线,无节操的肆意传播。但微信必定会为其开辟专区,稳定的增加流量,形成和一个成熟的分发机制。H5游戏不再需要有上顿没下顿的打游击,而微信也将凭借其社交属性和浏览器优势,牢牢的占据H5游戏的分发高地,进而加重腾讯系在移动游戏领域的砝码,借H5游戏这股热潮上走出微信商业化的关键一步。
H5价值不止游戏,或掀移动应用、视频等多行业洗牌
虽然此次微信浏览器的升级,对H5游戏来说是个重大利好,但它带来的影响可能远不止于游戏,更多的移动行业将逐次的受到影响、推进变革:
第一步,轻度的H5小游戏被淘汰,中小CP转型or转行;
第二步,重度化H5游戏迎来大发展,行业出现两极分化,巨头显示雏形;
第三步,微信应用号上线,H5会让众多O2O、新闻媒体、社交等领域的移动应用向浏览器靠拢,依附在微信生态的旗帜之下。
第四步,H5技术蔓延发展到视频、动画、广告、VR等多个领域。大部分我们日常使用到的APP服务,或许都可以在微信生态内直接用浏览器解决。
HTML5应用场景
毫无疑问,微信应用号将让移动互联网多个领域的洗牌更加激烈。不过H5在前些年,也曾屡次掀起过改变行业的高潮理想。这一次H5的价值能否真正的实现,这取决于众多巨头们能否用确实在用H5的先进性去改变移动产品的体验,提升行业的效率,而非借H5概念去包装热炒某些无法新增实际价值的产品。能否坚持这一点,将决定H5和Web应用的未来。
*请认真填写需求信息,我们会在24小时内与您取得联系。