JavaScript利用多彩线条摆出心形效果的示例代码

 更新时间:2022年07月06日 11:12:40   作者:肥学  
这篇文章主要为大家详细介绍了如何利用JavaScript语言实现多彩线条摆出心形效果,文中的实现步骤讲解详细,快跟随小编一起动手尝试一下吧

演示

源码展示

创建画布

 <canvas width="300" height="300" style="width:100%;height:100vh;" id="c"></canvas>

基础样式设置

overflow 语法: overflow:{1,2}= visible | hidden | scroll | auto

默认值:visible

取值:

visible:不剪切内容。hidden:将超出对象尺寸的内容进行裁剪,将不出现滚动条。scroll:将超出对象尺寸的内容进行裁剪,并以滚动条的方式显示超出的内容。auto:在需要时剪切内容并添加滚动条,此为body对象和textarea的默认值。

padding:[ | ]{1,4}

默认值:看每个独立属性

相关属性:[ padding-top ] || [ padding-right ] || [ padding-bottom ] || [padding-left ]

取值: :用长度值来定义内补白。不允许负值:用百分比来定义内补白。不允许负值

说明: 检索或设置对象四边的内部边距。

如果提供全部四个参数值,将按上、右、下、左的顺序作用于四边。 如果只提供一个,将用于全部的四边。

如果提供两个,第一个用于上、下,第二个用于左、右。 如果提供三个,第一个用于上,第二个用于左、右,第三个用于下。

内联对象可以使用该属性设置左、右两边的内补丁;若要设置上、下两边的内补丁,必须先使该对象表现为块级或内联块级。

对应的脚本特性为padding。

 html,body{
            border: 0;
            padding: 0;
            margin: 0;
            overflow: hidden;
            background: #000;
}

.info{
  z-index:999;
  position : absolute;
  left:0;
  top:0;
  padding:10px;
  color:#fff;
  background: rgba(0,0,0,0.5);
  text-transform:capitalize;
}

用js来设计动画效果

定义变量

var canvas = document.getElementById('c');
var ctx = canvas.getContext("2d");
var height = void 0,width = void 0,innerpoints = [],outerpoints = [],particles = [];

var noofpoints = 200,trashold = 10;
var x = void 0,y = void 0,p = void 0,n = void 0,point = void 0,dx = void 0,dy = void 0,color = void 0;
deltaangle = Math.PI * 2 / noofpoints,
r = Math.min(height, width) * 0.5;

var distance = function distance(x1, y1, x2, y2) {
  return Math.sqrt(Math.pow(y2 - y1, 2) + Math.pow(x2 - x1, 2));
};
var mapVal = function mapVal(num, in_min, in_max, out_min, out_max) {
  return (num - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
};

设置画布resize

var resize = function resize() {
  height = ctx.canvas.clientHeight;
  width = ctx.canvas.clientWidth;

  if (ctx.canvas.clientWidth !== canvas.width ||
  ctx.canvas.clientHeight !== canvas.height)
  {
    console.log("resized");
    canvas.width = width;
    canvas.height = height;
    ctx.translate(canvas.width / 2, canvas.height / 2);
    ctx.rotate(-Math.PI);
    innerpoints = [];
    r = 10;
    for (var i = deltaangle; i <= Math.PI * 2; i += deltaangle) {
      x = r * 16 * Math.pow(Math.sin(i), 3);
      y = r * (13 * Math.cos(i) - 5 * Math.cos(2 * i) - 2 * Math.cos(3 * i) - Math.cos(4 * i));
      innerpoints.push({
        x: x,
        y: y });


      x = 10 * r * 16 * Math.pow(Math.sin(i), 3);
      y = 10 * r * (13 * Math.cos(i) - 5 * Math.cos(2 * i) - 2 * Math.cos(3 * i) - Math.cos(4 * i));
      outerpoints.push({
        x: x,
        y: y });


      var step = random(0.001, 0.003, true);
      particles.push({
        step: step,
        x: x,
        y: y });

    }
  }
};

对线条设计

var draw = function draw() {
  ctx.fillStyle = "rgba(0,0,0,0.03)";
  ctx.fillRect(-width, -height, width * 2, height * 2);
  ctx.beginPath();

  for (var i = 0; i < innerpoints.length; i++) {
    s = outerpoints[i];
    d = innerpoints[i];
    point = particles[i];

    if (distance(point.x, point.y, d.x, d.y) > 10) {
      dx = d.x - s.x;
      dy = d.y - s.y;

      point.x += dx * point.step;
      point.y += dy * point.step;
      color = distance(0, 0, point.x, point.y);
      ctx.beginPath();
      ctx.fillStyle = "hsl(" + color % 360 + ",100%,50%)";
      ctx.arc(point.x, point.y, 2, 0, Math.PI * 2, false);
      ctx.closePath();
      ctx.fill();
    } else {
      point.x = d.x;
      point.y = d.y;
      ctx.beginPath();
      ctx.arc(point.x, point.y, 2, 0, Math.PI * 2, false);
      ctx.closePath();
      ctx.fill();
      particles[i].x = s.x;
      particles[i].y = s.y;
      particles[i].step = random(0.001, 0.003, true);
    }
  }

};

到此这篇关于JavaScript利用多彩线条摆出心形效果的示例代码的文章就介绍到这了,更多相关JavaScript线条摆出心形内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Bootstrap警告框(Alert)插件使用方法

    Bootstrap警告框(Alert)插件使用方法

    这篇文章主要为大家详细介绍了Bootstrap 警告框(Alert)插件的使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • bootstrap table实现合并单元格效果

    bootstrap table实现合并单元格效果

    这篇文章主要为大家详细介绍了bootstrap table实现合并单元格效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-12-12
  • 对JavaScript的eval()中使用函数的进一步讨论

    对JavaScript的eval()中使用函数的进一步讨论

    《JavaScript语言精髓与编程实践》的读者I22141提出了一问题:为什么下面这段代码在JScript 和SpiderMonkey中表现不一样:
    2008-07-07
  • 你应该了解的JavaScript Array.map()五种用途小结

    你应该了解的JavaScript Array.map()五种用途小结

    大家都知道map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。下面这篇文章主要给大家介绍了关于JavaScript Array.map()的五种用途,需要的朋友可以参考下
    2018-11-11
  • 借助javascript代码判断网页是静态还是伪静态

    借助javascript代码判断网页是静态还是伪静态

    如何看同类型的网站采用的是静态还是伪静态,一般网页后缀都是以.html结尾。我们可以借助一段简单的javascript代码判断一下
    2014-05-05
  • 解决JS使用fill()进行数组填充遇到的问题

    解决JS使用fill()进行数组填充遇到的问题

    最近在做算法题时,遇到需要创建二维数组并进行初始化的情况,刚开始我使用的是 new Array(n).fill(new Array(n).fill('.')) 进行二维数组的初始化,但无论怎样我都通不过测试用例,所以本文就给大家详细的介绍了如何解决这类问题以及将js中的fill(方法重学一下
    2023-09-09
  • js实现直播点击飘心效果

    js实现直播点击飘心效果

    这篇文章主要为大家详细介绍了js实现直播点击飘心效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-08-08
  • js获取当前日期时间及其它日期操作汇总

    js获取当前日期时间及其它日期操作汇总

    这篇文章主要介绍了js获取当前日期时间及其它日期操作汇总,感兴趣的小伙伴们可以参考一下
    2016-03-03
  • JavaScript最完整的深浅拷贝实现方式详解

    JavaScript最完整的深浅拷贝实现方式详解

    这篇文章主要为大家详细介绍了JavaScript最完整的深浅拷贝实现方式,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • 使用JSLint提高JS代码质量方法分享

    使用JSLint提高JS代码质量方法分享

    这篇文章主要介绍了JSLint提高JS代码质量的方法,有需要的朋友可以参考一下
    2013-12-12

最新评论