js实现水波纹背景

<!DOCTYPE html>
<html>
    <head>
     <title>水波背景</title>
     <meta charset="utf-8" />
     <style>
         html, body {width:100%; height:100%; padding:0; margin:0;}
     </style>
    </head>
    <body>
         <canvas id="canvas" style="position:absolute;top:0px;left:0px;z-index:1;"></canvas>
        <script type="text/javascript">
           //获得canvas容器
          var canvas = document.getElementById(‘canvas‘);
          //获得画笔
          var ctx = canvas.getContext(‘2d‘);
          //canvas设置宽度
          canvas.width = canvas.parentNode.offsetWidth;
          //canvas设置高度
          canvas.height = canvas.parentNode.offsetHeight;
          //如果浏览器支持requestAnimFrame则使用requestAnimFrame否则使用setTimeout
          window.requestAnimFrame = (function(){
          return window.requestAnimationFrame  ||
            window.webkitRequestAnimationFrame ||
            window.mozRequestAnimationFrame ||
            function( callback ){
                 window.setTimeout(callback, 1000 / 60);
            };
          })();
          // 波浪大小
          var boHeight = canvas.height / 10;
          var posHeight = canvas.height / 1.2;
          //初始角度为0
          var step = 0;
          //定义三条不同波浪的颜色
          var lines = ["rgba(0,222,255, 0.2)", "rgba(157,192,249, 0.2)", "rgba(0,168,255, 0.2)"];
          function loop(){
              //清除canvas内容
               ctx.clearRect(0,0,canvas.width,canvas.height);
               step++;
               //画3个不同颜色的矩形
               for(var j = lines.length - 1; j >= 0; j--) {
                ctx.fillStyle = lines[j];
                //每个矩形的角度都不同,每个之间相差45度
                var angle = (step+j*50)*Math.PI/180;
                var deltaHeight = Math.sin(angle) * boHeight;
                var deltaHeightRight = Math.cos(angle) * boHeight;
                ctx.beginPath();
                ctx.moveTo(0, posHeight+deltaHeight);
                ctx.bezierCurveTo(canvas.width/2, posHeight+deltaHeight-boHeight, canvas.width / 2, posHeight+deltaHeightRight-boHeight, canvas.width, posHeight+deltaHeightRight);
                ctx.lineTo(canvas.width, canvas.height);
                ctx.lineTo(0, canvas.height);
                ctx.lineTo(0, posHeight+deltaHeight);
                ctx.closePath();
                ctx.fill();
           }
           requestAnimFrame(loop);
          }
          loop();
     </script>
</body>
</html>
时间: 2024-10-11 06:09:27

js实现水波纹背景的相关文章

android 5.0 默认水波纹背景属性,可设置不论什么View

actionBarItemBackground   5.0以上超出边界圆形水波纹 selectableItemBackground  5.0以上边界内圆形水波纹 这两个属性在5.0下面是默认的灰色效果,个人认为也非常唯美 使用方法 android:background="?android:attr/actionBarItemBackground" android:background="?android:attr/selectableItemBackground"

android 5.0 默认水波纹背景属性,可设置任何View

actionBarItemBackground   5.0以上超出边界圆形水波纹 selectableItemBackground  5.0以上边界内圆形水波纹 这两个属性在5.0以下是默认的灰色效果,个人觉得也很唯美 用法 android:background="?android:attr/actionBarItemBackground" android:background="?android:attr/selectableItemBackground"

水波纹进度控件----------WinForm控件开发系列

/// <summary> /// 水波纹进度控件 /// </summary> [ToolboxItem(true)] [DefaultProperty("Value")] [DefaultEvent("ValueChanged")] [Description("水波纹进度控件")] public partial class WaveProgressExt : Control { public delegate void

如何使用 HTML5 Canvas 制作水波纹效果

原文:如何使用 HTML5 Canvas 制作水波纹效果 今天,我们继续分享 JavaScript 实现的效果例子,这篇文章会介绍使用 JavaScript 实现水波纹效果.水波效果以图片为背景,点击图片任意位置都会触发.有时候,我们使用普通的 Javascript 就可以创建一个很有趣的解决功能. 在线演示      源码下载 Step 1. HTML 和以前一样,首先是 HTML 代码: <!DOCTYPE html> <html> <head> <meta

css 滚动视差 之 水波纹效果

核心属性: background-attachment 这个属性就牛逼了, 它可以定义背景图片是相对视口固定, 还是随着视口滚动, 加上这个属性网页瞬间就从屌丝变成 高大上. 我们来看个例子: html: <div class="attach view"></div> <div class="text view">I WANT FLY</div> <div class="attach view"

Android 水波纹点击效果(Ripple Effect)

上周Android发布了Android M的Preview版本.但想必Android5.0很多炫酷效果,多数开发者还没有使用过,那更不要说广大用户了. 本文介绍的是Android5.0中其中一个炫酷的效果,点击水波纹扩散效果(Ripple Effect). 以下介绍的实现方式都是调用Android5.0的新API,并非自定义实现,所以支持在Android5.0的设备. 而大家想兼容低系统版本的话,就需要新建v21(即Android5.0)的Resource Directory. 圆角背景的水波纹

Android L中水波纹点击效果的实现

博主参加了2014 CSDN博客之星评选,帮我投一票吧. 点击给我投票 前言 前段时间android L(android 5.0)出来了,界面上做了一些改动,主要是添加了若干动画和一些新的控件,相信大家对view的点击效果-水波纹很有印象吧,点击一个view,然后一个水波纹就会从点击处扩散开来,本文就来分析这种效果的实现.首先,先说下L上的实现,这种波纹效果,L上提供了一种动画,叫做Reveal效果,其底层是通过拿到view的canvas然后不断刷新view来完成的,这种效果需要view的支持,

android 5.0 水波纹 实现

1. 定义一个普通圆角背景的xml; rounded_corners.xml <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <solid android:color="#F

android 自定义控件之水波纹loading的实现

恩恩,需求还是没有下来,整了一天多,再次整出一个loading框,看来我对loading框是情有独钟,好了,不多bb,先上图: 恩,就是这么个东东,较之前两个,有了点技术含量,但是其实也不是很难,之所以做了一天多,原因是又特么踩了一个坑,坑了我一个下午的时间,伤不起,至于是什么坑,下面再说: 好了,完成这个之前必要的知识储备,二阶贝塞尔曲线,也去网上看了一些文章,还有说要三阶贝塞尔曲线知识的,其实我觉得没必要,二阶就够了,下面附上一个链接,看完就知道贝塞尔曲线到底是个 什么 东东了:http:/