动画背景与画布
Animated background with canvas
如何实现html5画布动画背景?我想为这个动画添加鼠标事件。我有文字背景的问题,因为它消失在画布上绘画。
动画背景与画布
好的,所以听起来,你可能想通过找到一个你感兴趣的页面来检查MDN(像canvasRenderingContext2d页面),并从那里开始阅读(你会很快学到很多)。但是,回到这篇文章的要点,我建议(从你列出的问题判断)是:
- 通过
window
的光标事件检查光标位置。 - 如果绘制别名是由于画布透明度造成的问题,则每次绘制时清除画布。
- 使用
requestAnimationFrame
帮助浏览器调度画布重绘。
下面显示了这样一个实现的演示示例。在下面的示例中,光标的坐标显示在游标位置,与游标位置相对于页面中心的黄色圆点背景。享受吧!
var bgcanvas = document.getElementById('backgroundCanvas'),
bgcontext = bgcanvas.getContext('2d'),
mouseX = 0,
mouseY = 0,
mouseChanged = false;
window.addEventListener('mousemove', function(evt){
if (mouseX !== evt.clientX)
mouseX = evt.clientX, mouseChanged = true;
if (mouseY !== evt.clientY)
mouseY = evt.clientY, mouseChanged = true;
});
var repaintBGcanvasCUR = 0;
var repaintBGcanvas = function(){
requestAnimationFrame(repaintBGcanvas);
if ((++repaintBGcanvasCUR%2) // only modify the canvas half the time to reduce the CPU strain
&& mouseChanged){ // if the mouse has changed
mouseChanged = false;
bgcontext.clearRect(
0,0,bgcanvas.width,bgcanvas.height);
bgcontext.beginPath();
// create the yellow circle path:
bgcontext.arc(mouseX, mouseY,
// pythagorean theorem:
Math.hypot(mouseX-bgcanvas.width/2, mouseY-bgcanvas.height/2)/4,
0, 2 * Math.PI);
bgcontext.closePath();
bgcontext.fillStyle = "rgba(255,255,0,.5)";
// fill in the yellow circle
bgcontext.fill();
bgcontext.textAlign = 'center'; // horozontally center the text
bgcontext.textBaseline = 'middle'; // vertically center the text
bgcontext.font = '48px monospace'; // make the text fancy
bgcontext.fillStyle = 'red'; // make the text fancy
bgcontext.fillText( mouseX + ' X ' + mouseY, mouseX, mouseY);
}
}
window.addEventListener(
'load', repaintBGcanvas );
var resizeBackgroundCanvas = function(){
bgcanvas.width = window.innerWidth;
bgcanvas.height = window.innerHeight;
}
window.addEventListener(
'resize', resizeBackgroundCanvas );
window.addEventListener(
'load', resizeBackgroundCanvas );
// speed up canvas:
bgcontext.imageSmoothingEnabled = false;
html, body, #backgroundCanvas {
width: 100%;
height: 100%;
margin: 0;
cursor: none;
}
#backgroundCanvas {
z-index: -2147483647; /*maximum far back*/
position: fixed;
top: 0; left: 0;
}
p {
margin: 3em 2em;
}
<canvas id="backgroundCanvas"></canvas>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut eu felis eros. Donec tellus risus, dapibus luctus velit nec, molestie pulvinar tellus. Nulla cursus placerat risus in fermentum. Vestibulum rutrum rhoncus leo in sagittis. Morbi blandit, nibh et ornare faucibus, lectus massa vestibulum nulla, et pellentesque augue nunc ut tellus. Cras interdum, diam nec tincidunt rhoncus, dolor tortor lobortis ante, quis pretium lectus enim at lectus. Suspendisse consectetur, neque sed vulputate cursus, ex erat tempor magna, eu efficitur purus odio id libero. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas pellentesque suscipit justo ut tristique. Ut finibus congue nisi. Interdum et malesuada fames ac ante ipsum primis in faucibus. Proin feugiat eget nulla rhoncus semper. Proin placerat efficitur tortor, id porta est maximus ut. Phasellus tincidunt nisi sagittis consectetur laoreet. Cras eget consectetur mauris. Maecenas ornare, neque ac finibus sagittis, quam orci finibus nunc, vel cursus enim orci a arcu.</p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut eu felis eros. Donec tellus risus, dapibus luctus velit nec, molestie pulvinar tellus. Nulla cursus placerat risus in fermentum. Vestibulum rutrum rhoncus leo in sagittis. Morbi blandit, nibh et ornare faucibus, lectus massa vestibulum nulla, et pellentesque augue nunc ut tellus. Cras interdum, diam nec tincidunt rhoncus, dolor tortor lobortis ante, quis pretium lectus enim at lectus. Suspendisse consectetur, neque sed vulputate cursus, ex erat tempor magna, eu efficitur purus odio id libero. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas pellentesque suscipit justo ut tristique. Ut finibus congue nisi. Interdum et malesuada fames ac ante ipsum primis in faucibus. Proin feugiat eget nulla rhoncus semper. Proin placerat efficitur tortor, id porta est maximus ut. Phasellus tincidunt nisi sagittis consectetur laoreet. Cras eget consectetur mauris. Maecenas ornare, neque ac finibus sagittis, quam orci finibus nunc, vel cursus enim orci a arcu.</p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut eu felis eros. Donec tellus risus, dapibus luctus velit nec, molestie pulvinar tellus. Nulla cursus placerat risus in fermentum. Vestibulum rutrum rhoncus leo in sagittis. Morbi blandit, nibh et ornare faucibus, lectus massa vestibulum nulla, et pellentesque augue nunc ut tellus. Cras interdum, diam nec tincidunt rhoncus, dolor tortor lobortis ante, quis pretium lectus enim at lectus. Suspendisse consectetur, neque sed vulputate cursus, ex erat tempor magna, eu efficitur purus odio id libero. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas pellentesque suscipit justo ut tristique. Ut finibus congue nisi. Interdum et malesuada fames ac ante ipsum primis in faucibus. Proin feugiat eget nulla rhoncus semper. Proin placerat efficitur tortor, id porta est maximus ut. Phasellus tincidunt nisi sagittis consectetur laoreet. Cras eget consectetur mauris. Maecenas ornare, neque ac finibus sagittis, quam orci finibus nunc, vel cursus enim orci a arcu.</p>
相关文章:
- 如何使用css动画/javascript使具有背景图像的元素出现
- CSS动画背景图像的过渡越来越暗
- 如何用jquery动画改变背景颜色,就像一个过渡
- 如何动画删除悬停后的背景
- 仅为背景位置X轴制作动画
- 如何像下面给出的页面一样获得背景动画
- AngularJs设置背景颜色/颜色的动画
- 动画渐变(javascript)背景不会延伸到窗口的整个高度
- jQuery动画背景大小属性
- 视差'背景图像/位置/附件'jQuery的动画很不稳定
- SVG模式动画和背景淡入问题
- 使用CSS或SVG设置与背景颜色匹配的文本颜色的动画
- CSS3 或 HTML5 - 如何制作背景动画,如 HTML5 页面中漂浮的云
- 延迟并设置背景动画
- Jquery UI使用scroll_pos制作背景动画
- 设置画布背景动画
- 烟雾不透明度背景动画
- 如何同时创建ajax请求和背景动画
- 如何使背景动画进入循环(重复函数)
- 在用户激活动画期间暂停所有背景动画(jquery)