HTML+CSS+JS实现 ❤️彩色3D线条动画特效❤️

   效果演示:  

代码目录:

主要代码实现:

HTML代码 :

<!doctype html>
<html><head><meta charset="utf-8"><title>彩带特效</title></head><body><script id="fs" type="x-shader/x-fragment">precision mediump float; uniform float time; uniform vec2 mouse; uniform vec2 resolution; // window ratio float ratio = resolution.x / resolution.y; float PI = 3.1415926; float line(vec2 p, float pct, float i) { return smoothstep(pct - sin(time / i) *0.06, pct, p.y) - smoothstep(pct, pct + sin(time / i) * 0.06, p.y); } vec2 rotate2d(vec2 p, float angle) { p = mat2(cos(angle), -sin(angle), sin(angle), cos(angle)) * p; return p; } void main(void) { // center center vec2 p = vec2(gl_FragCoord.xy* 2.0 - resolution) / min(resolution.x, resolution.y); // left bottom //vec2 p = gl_FragCoord.xy / resolution.xy; float l = length(p); vec3 c = vec3(0.0); vec3 d = vec3(l, 1.0 - p.x, 1.0 - p.y); for (float i = 1.0; i<=3 6.0; i++) { p=rotate2d(p, i * 10.0); float s=t ime / i; float y=s in(p.x + s) * 0.4 * l; float pct=l ine(p, y, i); c +=p ct; } gl_FragColor=v ec4(c * d, 1.0); } </script><script id="vs" type="x-shader/x-vertex">attribute vec3 position; void main(void){ gl_Position = vec4(position, 1.0); }</script><script>// variable for globallet c, // canvascw, ch, // window sizemx, my, // mousegl, // contextuniLocation, // for shaderrun, // not usedeCheck, // not usedstartTime, time, tempTime; // times/*** Make canvas*/const createCanvas = () => {const b = document.getElementsByTagName('body')[0];const c = document.createElement('canvas');c.setAttribute('id', 'canvas');c.style.position = 'fixed';c.style.display = 'block';c.style.zIndex = '-1';c.style.top = '0';c.style.left = '0';c.style.width = '100%';c.style.height = '100%';c.style.background = 'black';b.appendChild(c);};/*** Check event* @params {Object} e - check event*/const checkChange = e => {run = e.currentTarget.checked;if (run) {startTime = new Date().getTime();render();} else {tempTime += time;}};/*** Mouse event* @params {Object} e - mouse event*/const mouseMove = e => {mx = e.clientX / cw;my = e.clientY / ch;};/*** Resize window*/const resizeWindow = () => {cw = c.width = window.innerWidth;ch = c.height = window.innerHeight;init();};/*** Rendering function*/const render = () => {// run?if (!run) return;// timetime = (new Date().getTime() - startTime) * 0.001;// clear colorgl.clear(gl.COLOR_BUFFER_BIT);// uniformsgl.uniform1f(uniLocation[0], time);gl.uniform2fv(uniLocation[1], [mx, my]);gl.uniform2fv(uniLocation[2], [cw, ch]);// drawgl.drawElements(gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0);gl.flush();// recurrequestAnimationFrame(render);};/*** Create shader* @params {String} id - element id* @return {Object} shader - shader object*/const create_shader = id => {let shader;// get reference tagconst scriptElement = document.getElementById(id);// if not exsist returnif (!scriptElement) return;// check script attributeswitch (scriptElement.type) {// vertex shadercase 'x-shader/x-vertex':shader = gl.createShader(gl.VERTEX_SHADER);break;// fragment shadercase 'x-shader/x-fragment':shader = gl.createShader(gl.FRAGMENT_SHADER);break;default:return;}// assign source to shadergl.shaderSource(shader, scriptElement.text);// compile shadergl.compileShader(shader);// check shader was compiled?if (gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {return shader;} else {console.log(gl.getShaderInfoLog(shader));}};/*** Create program object and link shader function* @param {String} vs - element name* @param {String} fs - element name* @return {object} program - return program object*/const create_program = (vs, fs) => {let program;// create program objectprogram = gl.createProgram();// attach shader program objectgl.attachShader(program, vs);gl.attachShader(program, fs);// link shadergl.linkProgram(program);// check shader linkif (gl.getProgramParameter(program, gl.LINK_STATUS)) {// if success enable programgl.useProgram(program);return program;} else {return null;}};/*** Create vbo function* @param {Array} - Array in position* @return {Object} - vertex buffer object */const create_vbo = data => {//create buffer objectconst vbo = gl.createBuffer();// bind buffergl.bindBuffer(gl.ARRAY_BUFFER, vbo);// set data to buffergl.bufferData(gl.ARRAY_BUFFER, new Float32Array(data), gl.STATIC_DRAW);// invalidata buffergl.bindBuffer(gl.ARRAY_BUFFER, null);return vbo;};/*** Create index buffer object function* @param {Array} data - Array in index* @return {Object} ibo - index buffer object*/const create_ibo = data => {// create buffer objectconst ibo = gl.createBuffer();// bind buffergl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, ibo);// set data to buffergl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Int16Array(data), gl.STATIC_DRAW);// invalidate buffergl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, null);return ibo;};/*** Init canvas*/const init = () => {time = 0.0;tempTime = 0.0;uniLocation = new Array();// get elementc = document.getElementById('canvas');//eCheck = document.getElementById('check');// canvas sizecw = c.width = window.innerWidth;ch = c.height = window.innerHeight;// get webgl contextgl = c.getContext('webgl') || c.getContext('experimental-webgl');// set viewportgl.viewport(0, 0, cw, ch);// init shaderconst prg = create_program(create_shader('vs'), create_shader('fs'));run = prg != null;if (!run) {eCheck.checked = false;}uniLocation[0] = gl.getUniformLocation(prg, 'time');uniLocation[1] = gl.getUniformLocation(prg, 'mouse');uniLocation[2] = gl.getUniformLocation(prg, 'resolution');// init vertexconst position = [-1.0, 1.0, 0.0,1.0, 1.0, 0.0, -1.0, -1.0, 0.0,1.0, -1.0, 0.0];const index = [0, 2, 1,1, 2, 3];const vPosition = create_vbo(position);const vIndex = create_ibo(index);const vAttLocation = gl.getAttribLocation(prg, 'position');gl.bindBuffer(gl.ARRAY_BUFFER, vPosition);gl.enableVertexAttribArray(vAttLocation);gl.vertexAttribPointer(vAttLocation, 3, gl.FLOAT, false, 0, 0);gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, vIndex);// etc initgl.clearColor(0.0, 0.0, 0.0, 1.0);mx = 0.5;my = 0.5;startTime = new Date().getTime();};window.addEventListener('load', () => {createCanvas();init();render();// eventc.addEventListener('mousemove', mouseMove, false);//eCheck.addEventListener('change', checkChange, false);window.addEventListener('resize', resizeWindow, false);}, false);</script></body></html>

源码获取

查看博主主页或私信博主获取

精彩推荐更新中:

HTML5大作业实战100套

  打卡 文章 更新 40  /  100天

大家可以点赞、收藏、关注、评论我啦 、需要完整文件随时联系我或交流哟~!

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/562045.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql column legnth too big for_Column length too big for column 'Flist' (max = 21845);

建表语句报如下错误&#xff1a;CREATE TABLE test_1 (Fid bigint(20) unsigned NOT NULL,Ftype tinyint(4) unsigned NOT NULL,Flist varchar(65532) DEFAULT NULL,Fstatus tinyint(3) unsigned DEFAULT 0,Ftime bigint unsigned DEFAULT 0,Faddtime bigint unsigned DEFAULT …

HTML+CSS+JS实现 ❤️卡通人物吃水果游戏❤️

效果演示&#xff1a; 代码目录&#xff1a; 主要代码实现&#xff1a; HTML代码 : <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial…

py哪个函数可以返回输入的变量类型_[Python基础]二、pycharm,python变量

2.1 Python简介Life is short,you need Python (人生苦短&#xff0c;我用Python)解释器&#xff1a;将其他语言翻译成机器语言的工具&#xff0c;称为编译器编译器的翻译方法有两种&#xff1a;编译解释Python的设计哲学优雅明确简单Python开发者哲学&#xff1a;用一种方法&a…

HTML+CSS+JS实现 贪吃蛇游戏源码

效果演示&#xff1a; 文末获取源码 代码目录&#xff1a; 主要代码实现&#xff1a; 部分代码 : <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equiv&qu…

mysql sql高级应用程序_mysql-sql高级应用

sql语言进阶典型操作order by- select * from play_list order bycreatetime;- select * from play_list order by bookedcount desc,createtime asc;order by语句用于根据指定的列对结果集进行排序order by语句默认按照升序对记录排序&#xff0c;使用desc则降序排序order by也…

HTML+CSS+JS实现 ❤️个人相册封面卡片❤️

效果演示&#xff1a; 代码目录&#xff1a; 主要代码实现&#xff1a; CSS样式&#xff1a; charset "utf-8"; import url("https://s2.pstatp.com/cdn/expire-1-M/font-awesome/4.7.0/css/font-awesome.min.css"); body {background-color: #1F1F1F;o…

python隐藏启动台_如何在Python中启动后台进程?

如何在Python中启动后台进程&#xff1f;我正在尝试将shell脚本移植到更易读的python版本。 原始shell脚本在后台使用“&#xff06;amp;”启动多个进程(实用程序&#xff0c;监视器等)。 如何在python中实现相同的效果&#xff1f; 我希望这些进程不会在python脚本完成时死掉。…

HTML+CSS+JS实现 ❤️swiper倾斜图片特效❤️

效果演示&#xff1a; 代码目录&#xff1a; 主要代码实现&#xff1a; CSS样式&#xff1a; .img_swiper {width: 800px;margin: 0 auto;position: relative; }.img {width: 100%;height: 100%; }.img_swiper .swiper-button-prev {width: 40px;height: 40px;background-im…

如何将c语言程序封装供python调用_C++调用python

C调用python在C/C中嵌入Python&#xff0c;可以使用Python提供的强大功能&#xff0c;通过嵌入Python可以替代动态链接库形式的接口&#xff0c;这样可以方便地根据需要修改脚本代码&#xff0c;而不用重新编译链接二进制的动态链接库。至少你可以把它当成文本形式的动态链接库…

HTML+CSS+JS实现 ❤️touchSlider图片滚动图片轮播❤️

效果演示&#xff1a; 代码目录&#xff1a; 主要代码实现&#xff1a; CSS样式&#xff1a; charset "utf-8"; * {margin: 0;padding: 0;list-style: none;border: 0; }body {width: 100%;margin: 0 auto;overflow: hidden }/* main_image */.main_visual {heigh…

win10配置mysql8.0_Win10下mysql 8.0.20 安装配置方法图文教程

Win10系统下MySQL 8.0.20安装和配置超详细教程MySQL下载MySQL直接去官网下载就行&#xff0c;选择community版本(免费)下载&#xff0c;链接。在select operating system中选择Microsoft Windows&#xff0c;下方对应出现最新版本的MySQL&#xff0c;目前是MySQL 8.0.20&#x…

HTML+CSS+JS实现 ❤️echarts省市区地图城市选择❤️

效果演示&#xff1a; 代码目录&#xff1a; 主要代码实现&#xff1a; CSS样式&#xff1a; * {margin: 0;padding: 0; }body {font-family: Exo, -apple-system, Open Sans, HelveticaNeue-Light, Helvetica Neue Light, Helvetica Neue, Hiragino Sans GB, Microsoft YaH…

基于SpringBoot+mybatis+layui就业管理系统设计和实现

&#x1f345; 作者主页&#xff1a;Java李杨勇 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java李杨勇公号作者✌ 简历模板、学习资料、面试题库、技术互助【关注我&#xff0c;都给你】 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f…

java集合清空_java 集合删除数据

public static void main(String[] args) {List list new ArrayList<>(Arrays.asList(1, 2, 3, 4));// 常规删除// list.removeIf(next -> next 3);Iterator iterator list.iterator();while (iterator.hasNext()) {// Integer next iterator.next();// 当不执行 …

HTML+CSS+JS实现 ❤️图片轮播幻灯片❤️

效果演示&#xff1a; 文末获取源码 代码目录&#xff1a; 主要代码实现&#xff1a; CSS样式&#xff1a; font-face {font-weight: normal;font-style: normal; }.csslider1 {display: inline-block;position: relative;max-width: 833px;width: 100%;margin-top: 10px; }.…

single java_java single Pattern 单例模式

单例模式是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式&#xff0c;它涉及到一个单一的类&#xff0c;该类自己负责创建自己的对象并且确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式&#xff0c;可以直接访问&#xff0c;不需要实例化…

HTML+CSS+JS实现 ❤️ html5响应式图片轮播❤️

效果演示&#xff1a; 文末获取源码 代码目录&#xff1a; 主要代码实现&#xff1a; CSS样式&#xff1a; .flickerplate {position: relative;width: 100%;height: 600px;background-color: #e6e6e6;overflow: hidden }.flickerplate ul.flicks {width: 10000%;height: 100…

php time java_java 时间戳和PHP时间戳 的转换 php time()

最近在弄discuz,数据库mysql,时间类型int 10总结一下java 时间戳和PHP时间戳 的转换问题&#xff1a;由于精度不同&#xff0c;导致长度不一致&#xff0c;直接转换错误。JAVA时间戳长度是13位&#xff0c;如&#xff1a;1294890876859PHP时间戳长度是10位&#xff0c; 如&…

HTML+CSS+JS实现 ❤️HTML5图片幻灯片轮播切换❤️

效果演示&#xff1a; 文末获取源码 代码目录&#xff1a; 主要代码实现&#xff1a; HTML代码 : <!DOCTYPE html> <html><head><meta charset"utf-8"><meta name"viewport" content"widthdevice-width, initial-scale1…

HTML+CSS+JS实现echarts图表炫光分布地图动画

效果演示&#xff1a; 文末获取源码 代码目录&#xff1a; 主要代码实现&#xff1a; HTML代码 : <html lang"en"><head><meta charset"utf-8"><title>ECharts</title> </head><body style"background:#1B1…