JavaScript图形实例:蝴蝶结图案
如何在JavaScript中实现网页的动画和特效
如何在JavaScript中实现网页的动画和特效JavaScript是一种强大的编程语言,它可以用来为网页添加动画和特效。
在本文中,我们将学习如何使用JavaScript实现网页动画和特效。
1.使用CSS动画:JavaScript可以与CSS动画配合使用,通过控制CSS属性的变化来实现动画效果。
可以通过添加或移除类来触发CSS 动画,也可以使用JavaScript直接修改CSS属性的值。
以下是一些常见的CSS属性,可以用来实现动画效果:- transform:可以利用translate、scale、rotate等函数来改变元素的位置、尺寸和旋转角度。
- opacity:可以通过改变元素的不透明度来实现淡入淡出效果。
- transition:可以使用过渡效果来平滑地改变元素的属性值。
通过在JavaScript中创建类或直接操作元素的样式,可以通过移动、旋转和改变元素的透明度来实现各种动画效果。
2.使用setTimeout和setInterval函数:JavaScript中的setTimeout和setInterval函数可以用来设置定时器,通过定时器来触发函数的执行。
在动画和特效中,可以使用setTimeout函数来延迟执行某个函数,来实现延迟效果。
setInterval函数可以用来循环执行一个函数,从而实现连续播放的效果。
3.使用requestAnimationFrame函数:requestAnimationFrame是一个优化的浏览器API,它可以在每次浏览器重绘之前调用一个回调函数,通常用于执行动画。
与setTimeout和setInterval不同,requestAnimationFrame会根据浏览器的绘制能力来调整动画的帧率,保证动画的流畅性并减少浏览器的负载。
使用requestAnimationFrame函数来调用动画函数,可以使用递归的方式来循环播放动画,通过不断更新元素的位置、尺寸和样式来实现动画效果。
JavaScript实现动态网页特效
JavaScript实现动态网页特效JavaScript是一种常用的编程语言,可以用于实现动态网页特效。
通过JavaScript,开发者可以为网页添加各种交互效果,使用户体验更加丰富和吸引人。
以下是一些常见的JavaScript动态网页特效的实现方法:1. 鼠标悬停效果:通过JavaScript可以实现当鼠标悬停在某个区域上时,改变该区域的样式或显示隐藏的内容。
例如,当用户将鼠标悬停在一个按钮上时,可以让按钮的颜色变化或显示按钮下方的一段描述文字。
2. 幻灯片效果:通过JavaScript可以实现网页上的幻灯片效果,使多张图片自动轮播展示。
可以通过设置定时器和改变图片的显示状态来实现。
这种效果常用于图片展示、轮播广告等地方。
3. 下拉菜单效果:通过JavaScript可以实现网页上的下拉菜单效果,让用户点击或悬停在一个导航栏上时,下方显示出更多的选项。
可以通过设置事件监听和改变菜单的可见性来实现。
4. 表单验证效果:通过JavaScript可以实现网页上的表单验证效果,检查用户输入的内容是否符合要求。
可以通过设置事件监听和编写验证函数来实现。
例如,当用户提交表单时,可以检查是否所有的必填项都已填写,并给出相应的提示。
5. 动态加载内容效果:通过JavaScript可以实现动态加载内容的效果,当用户滚动网页到一定位置时,自动加载更多的内容。
可以通过监听滚动事件和设置ajax 请求来实现。
这种效果常用于博客、社交媒体等网站上。
6. 特效动画效果:通过JavaScript可以实现各种特效动画,如淡入淡出效果、滑动效果、旋转效果等。
可以通过改变元素的显示状态、设置定时器和改变元素的样式来实现。
这种效果常用于网页中的广告、特效展示等地方。
7. 音频视频播放效果:通过JavaScript可以实现网页上的音频和视频播放效果。
可以通过设置事件监听、控制播放状态和改变样式来实现。
例如,当用户点击一个按钮时,可以播放音频或视频,并显示相应的控制按钮。
如何使用JavaScript实现Canvas绘图和动画
如何使用JavaScript实现Canvas绘图和动画使用JavaScript来实现Canvas绘图和动画是一种常见的技术,它可以实现各种各样的图形效果和动态交互,非常适合用于创建各种类型的网页动画和游戏。
在本文中,我将详细介绍如何使用JavaScript来绘制图形、实现动画以及一些常用的绘图和动画效果。
一、构建Canvas元素为了开始绘制和动画,我们首先需要在HTML文档中创建一个Canvas元素。
Canvas是HTML5中新增的元素,它提供了一个绘制2D 图形的区域,我们可以通过JavaScript来操纵它。
在HTML文档的body标签中添加以下代码:```<canvas id="myCanvas" width="500" height="300"></canvas> ```上面的代码创建了一个id为myCanvas的Canvas元素,宽度为500像素,高度为300像素。
二、获取Canvas上下文要绘制图形或进行动画,我们需要获取Canvas的上下文对象。
在JavaScript中,我们可以使用`getContext()`方法来获取上下文对象。
在JavaScript中,使用以下代码获取Canvas上下文对象:```const canvas = document.getElementById('myCanvas');const ctx = canvas.getContext('2d');```上面的代码通过`getElementById`方法获取了id为myCanvas的Canvas元素,然后通过`getContext`方法获取了2D上下文对象ctx。
三、绘制基本图形下面介绍如何使用JavaScript在Canvas上绘制一些基本图形,例如矩形、圆形和直线。
Canvas提供了一系列的API可以用于绘制图形。
js案例大全
js案例大全JavaScript(简称JS)是一种高级的、解释型的编程语言。
它是一种动态类型、弱类型、基于原型的语言,内建支持类型。
JavaScript是世界上最流行的编程语言之一,也是前端开发的核心技术之一。
在本文中,我们将为大家介绍一些常见的JavaScript案例,希望能够帮助大家更好地理解和运用JavaScript。
1. 表单验证。
表单验证是Web开发中常见的需求之一。
通过JavaScript,我们可以轻松实现对表单输入内容的验证,比如验证用户名、密码、邮箱、手机号等。
以下是一个简单的表单验证案例:```javascript。
function validateForm() {。
var username = document.forms["myForm"]["username"].value;var password = document.forms["myForm"]["password"].value;if (username == "" || password == "") {。
alert("用户名和密码不能为空");return false;}。
}。
```。
在上面的案例中,我们定义了一个validateForm函数来验证表单输入内容,如果用户名和密码为空,则弹出警告框,并且阻止表单提交。
这样可以有效地提高用户体验,避免用户输入不合法的内容。
2. 动态创建元素。
JavaScript可以帮助我们动态地创建、修改和删除HTML元素。
这在Web开发中非常有用,可以使页面更加灵活和动态。
以下是一个动态创建元素的案例:```javascript。
function addElement() {。
var newDiv = document.createElement("div");var newContent = document.createTextNode("Hello, World!");newDiv.appendChild(newContent);var currentDiv = document.getElementById("div1");document.body.insertBefore(newDiv, currentDiv);}。
JavaScript经典实例
JavaScript经典实例跨浏览器事件跨浏览器添加事件//跨浏览器添加事件 function addEvent(obj,type,fn){ if(obj.addEventListener){ obj.addEventListener(type,fn,false); }else if(obj.attachEvent){//IE obj.attchEvent('on'+type,fn); } }跨浏览器移除事件//跨浏览器移除事件function removeEvent(obj,type,fn){ if(obj.removeEventListener){ obj.removeEventListener(type,fn,false); }else if(obj.detachEvent){//兼容IE obj.detachEvent('on'+type,fn); }}跨浏览器阻⽌默认⾏为//跨浏览器阻⽌默认⾏为 function preDef(ev){ var e = ev || window.event; if(e.preventDefault){ e.preventDefault(); }else{ e.returnValue =false; } }跨浏览器获取⽬标对象//跨浏览器获取⽬标对象function getTarget(ev){ if(ev.target){//w3c return ev.target; }else if(window.event.srcElement){//IE return window.event.srcElement; }}跨浏览器获取滚动条位置//跨浏览器获取滚动条位置,sp == scroll position function getSP(){ return{ top: document.documentElement.scrollTop || document.body.scrollTop, left : document.documentElement.scrollLeft || document.bo 跨浏览器获取可视窗⼝⼤⼩//跨浏览器获取可视窗⼝⼤⼩ function getWindow () { if(typeof window.innerWidth !='undefined') { return{ width : window.innerWidth, height : window.innerHeight }} else{ return { width : document.documentElement.clientWidth, height : document.documentElement.clientHeight } } },js 对象冒充<script type = 'text/javascript'>function Person(name , age){ = name ; this.age = age ; this.say = function (){ return "name : "+ + " age: "+this.age ; } ; }var o = new Object() ;//可以简化为Object() Person.call(o , "zhangsan" , 20) ; console.log(o.say() );//name : zhangsan age: 20</script>js 异步加载和同步加载异步加载也叫⾮阻塞模式加载,浏览器在下载js的同时,同时还会执⾏后续的页⾯处理。
七个基于JavaScript实现的情人节表白特效
七个基于JavaScript实现的情⼈节表⽩特效⽬录七⼣情⼈节送花动画告⽩特效玫瑰花盛开动画告⽩特效3d旋转相册点击爱⼼散开动画告⽩特效雷电打出告⽩⽂字特效粒⼦组合告⽩⽂字特效⼩熊拉⼿CSS3情⼈节动画表⽩特效七⼣情⼈节送花动画告⽩特效效果展⽰代码展⽰:<div id='content'><ul class='content-wrap'><!-- 第⼀副画⾯ --><li><!-- 背景图 --><div class="a_background"><div class="a_background_top"></div><div class="a_background_middle"></div><div class="a_background_botton"></div></div><!-- 云 --><div class="cloudArea"><div class="cloud cloud1"></div><div class="cloud cloud2"></div></div><!-- 太阳 --><div id="sun"></div></li><!-- 第⼆副画⾯ --><li><!-- 背景图 --><div class="b_background"></div><div class="b_background_preload"></div><!-- 商店 --><div class="shop"><div class="door"><div class="door-left"></div><div class="door-right"></div></div><!-- 灯 --><div class="lamp"></div></div><!-- 鸟 --><div class="bird"></div></li><!-- 第三副画⾯ --><li><!-- 背景图 --><div class="c_background"><div class="c_background_top"></div><div class="c_background_middle"></div><div class="c_background_botton"></div></div><!-- ⼩⼥孩 --><div class="girl"></div><div class="bridge-bottom"><div class="water"><div id="water1" class="water_1"></div><div id="water2" class="water_2"></div><div id="water3" class="water_3"></div><div id="water4" class="water_4"></div></div></div><!-- 星星 --><ul class="stars"><li class="stars1"></li><li class="stars2"></li><li class="stars3"></li><li class="stars4"></li><li class="stars5"></li><li class="stars6"></li></ul><div class="logo">祝天下有情⼈终成眷属</div></li></ul><!-- 雪花 --><div id="snowflake"></div><!-- ⼩男孩 --><div id="boy" class="charector"></div></div>玫瑰花盛开动画告⽩特效效果展⽰:<radialGradient id="gradient-0" gradientUnits="userSpaceOnUse" cx="-107.308" cy="104.329" r="59.181" gradientTransform="matrix(0.261752, 0.411262, -0.686293, 0.596934, 160.094667, 49.38985)"> <stop offset="0" style="stop-color: rgb(255, 0, 0);"/><stop offset="1" style="stop-color: rgb(141, 41, 41);"/></radialGradient>var svg = document.getElementById('svg');var animation0 = document.getElementById('animate0');svg.addEventListener('mouseenter', function(){ animation0.beginElement(); });var animation1 = document.getElementById('animate1');svg.addEventListener('mouseenter', function(){ animation1.beginElement(); });var animation2 = document.getElementById('animate2');svg.addEventListener('mouseenter', function(){ animation2.beginElement(); });var animation3 = document.getElementById('animate3');svg.addEventListener('mouseenter', function(){ animation3.beginElement(); });var animation4 = document.getElementById('animate4');svg.addEventListener('mouseenter', function(){ animation4.beginElement(); });var animation5 = document.getElementById('animate5');svg.addEventListener('mouseenter', function(){ animation5.beginElement(); });var animation6 = document.getElementById('animate6');svg.addEventListener('mouseenter', function(){ animation6.beginElement(); });var animation7 = document.getElementById('animate7');svg.addEventListener('mouseenter', function(){ animation7.beginElement(); });var animation8 = document.getElementById('animate8');svg.addEventListener('mouseenter', function(){ animation8.beginElement(); });var animation9 = document.getElementById('animate9');svg.addEventListener('mouseenter', function(){ animation9.beginElement(); });var animation10 = document.getElementById('animate10');svg.addEventListener('mouseenter', function(){ animation10.beginElement(); });var animation11 = document.getElementById('animate11');svg.addEventListener('mouseenter', function(){ animation11.beginElement(); });var animation12 = document.getElementById('animate12');svg.addEventListener('mouseenter', function(){ animation12.beginElement(); });var animation13 = document.getElementById('animate13');svg.addEventListener('mouseenter', function(){ animation13.beginElement(); });var animation14 = document.getElementById('animate14');svg.addEventListener('mouseenter', function(){ animation14.beginElement(); });3d旋转相册效果展⽰:代码展⽰:<div class="hovertreeinfo"><h2></h2></div><!-- 仅⾃动播放⾳乐 --><!--<audio loop src="img/qianyuqianxun.mp3" id="audio" autoplay preload="auto">该浏览器不⽀持audio属性</audio>--><audio loop src="img\qianyuqianxun.mp3" id="audio" controls autoplay preload="auto">该浏览器不⽀持audio属性</audio><script type="text/javascript">//--创建页⾯监听,等待微信端页⾯加载完毕触发⾳频播放document.addEventListener('DOMContentLoaded', function () {function audioAutoPlay() {var audio = document.getElementById('audio');audio.play();document.addEventListener("WeixinJSBridgeReady", function () {audio.play();}, false);}audioAutoPlay();});//--创建触摸监听,当浏览器打开页⾯时,触摸屏幕触发事件,进⾏⾳频播放document.addEventListener('touchstart', function () {function audioAutoPlay() {var audio = document.getElementById('audio');audio.play();}audioAutoPlay();});</script><!--/*外层最⼤容器*/--><div class="wrap"><!-- /*包裹所有元素的容器*/--><div class="cube"><!--前⾯图⽚ --><div class="out_front"><img src="img/img01.jpg " class="pic" /></div><!--后⾯图⽚ --><div class="out_back"><img src="img/img02.jpg" class="pic"/></div><!--左图⽚ --><div class="out_left"><img src="img/img03.jpg" class="pic" /></div><div class="out_right"><img src="img/img04.jpg" class="pic" /></div><div class="out_top"><img src="img/img05.jpg" class="pic" /></div><div class="out_bottom"><img src="img/img06.jpg" class="pic" /><!--⼩正⽅体 --><span class="in_front"><img src="img/img07.jpg" class="in_pic" /></span><span class="in_back"><img src="img/img08.jpg" class="in_pic" /></span><span class="in_left"><img src="img/img09.jpg" class="in_pic" /></span><span class="in_right"><img src="img/img10.jpg" class="in_pic" /></span><span class="in_top"><img src="img/img11.jpg" class="in_pic" /></span><span class="in_bottom"><img src="img/img12.jpg" class="in_pic" /></span></div></div>点击爱⼼散开动画告⽩特效效果展⽰:代码展⽰:<svg height="320" width="320" class="like" onclick="document.body.classList.toggle('liked')"><path class="path" d="M 160 145 c 15 -90 170 -20 0 90 m 0 -90 c -15 -90 -170 -20 0 90" fill="white"> <!-- 80 by 70 --> </svg><!-- DECORATIONS (quite a lot of them) --><div class="dot dot-1"></div><div class="dot dot-2"></div><div class="dot dot-3"></div><div class="dot dot-4"></div><div class="dot dot-5"></div><div class="dot dot-6"></div><div class="dot dot-7"></div><div class="dot dot-8"></div>雷电打出告⽩⽂字特效效果展⽰:代码展⽰:<div class="page page-thunder-to-text"><input id="input" type="text" maxlength="24" placeholder="I love you!"><canvas id="canvas"></canvas></div><script>let canvas, ctx, w, h, thunder, text, particles, input;function Thunder(options) {options = options || {};this.lifespan = options.lifespan || Math.round(Math.random() * 10 + 10);this.maxlife = this.lifespan;this.color = options.color || '#fefefe';this.glow = options.glow || '#2323fe';this.x = options.x || Math.random() * w;this.y = options.y || Math.random() * h;this.width = options.width || 2;this.direct = options.direct || Math.random() * Math.PI * 2;this.max = options.max || Math.round(Math.random() * 10 + 20);this.segments = [...new Array(this.max)].map(() => {return {direct: this.direct + (Math.PI * Math.random() * 0.2 - 0.1),length: Math.random() * 20 + 80,change: Math.random() * 0.04 - 0.02};});this.update = function(index, array) {this.segments.forEach(s => { (s.direct += s.change) && Math.random() > 0.96 && (s.change *= -1) });(this.lifespan > 0 && this.lifespan--) || this.remove(index, array);}this.render = function(ctx) {if (this.lifespan <= 0) return;ctx.beginPath();ctx.globalAlpha = this.lifespan / this.maxlife;ctx.strokeStyle = this.color;ctx.lineWidth = this.width;ctx.shadowBlur = 32;ctx.shadowColor = this.glow;ctx.moveTo(this.x, this.y);let prev = { x: this.x, y: this.y };this.segments.forEach(s => {const x = prev.x + Math.cos(s.direct) * s.length;const y = prev.y + Math.sin(s.direct) * s.length;prev = { x: x, y: y };ctx.lineTo(x, y);});ctx.stroke();ctx.closePath();ctx.shadowBlur = 0;const strength = Math.random() * 80 + 40;const light = ctx.createRadialGradient(this.x, this.y, 0, this.x, this.y, strength); light.addColorStop(0, 'rgba(250, 200, 50, 0.6)');light.addColorStop(0.1, 'rgba(250, 200, 50, 0.2)');light.addColorStop(0.4, 'rgba(250, 200, 50, 0.06)');light.addColorStop(0.65, 'rgba(250, 200, 50, 0.01)');light.addColorStop(0.8, 'rgba(250, 200, 50, 0)');ctx.beginPath();ctx.fillStyle = light;ctx.arc(this.x, this.y, strength, 0, Math.PI * 2);ctx.fill();ctx.closePath();}this.remove = function(index, array) {array.splice(index, 1);}}粒⼦组合告⽩⽂字特效效果展⽰:代码展⽰:;(function(main) {var args = {};window.onload = function() {main(args);};})(function(args) {'use strict';var Box = function(x, y, w, h, s) {this.x = x;this.y = y;this.w = w;this.h = h;this.s = s;this.a = Math.random() * Math.PI * 2;this.hue = Math.random() * 360;};Box.prototype = {constructor: Box,update: function() {this.a += Math.random() * 0.5 - 0.25;this.x += Math.cos(this.a) * this.s;this.y += Math.sin(this.a) * this.s;this.hue += 5;if(this.x > WIDTH) this.x = 0;else if(this.x < 0) this.x = WIDTH;if(this.y > HEIGHT) this.y = 0;else if(this.y < 0) this.y = HEIGHT;},render: function(ctx) {ctx.save();ctx.fillStyle = 'hsla(' + this.hue + ', 100%, 50%, 1)';ctx.translate(this.x, this.y);ctx.rotate(this.a);ctx.fillRect(-this.w, -this.h / 2, this.w, this.h);ctx.restore();}};var Circle = function(x, y, tx, ty, r) {this.x = x;this.y = y;this.ox = x;this.oy = y;this.tx = tx;this.ty = ty;this.lx = x;this.ly = y;this.r = r;this.br = r;this.a = Math.random() * Math.PI * 2;this.sx = Math.random() * 0.5;this.sy = Math.random() * 0.5;this.o = Math.random() * 1;this.delay = Math.random() * 200;this.delayCtr = 0;this.hue = Math.random() * 360;};⼩熊拉⼿CSS3情⼈节动画表⽩特效效果展⽰:代码展⽰:<div class="stage"><div class="couple"><div class="heart floating"></div><div class="bear he"><div class="ear--1"></div><div class="ear--2"></div><div class="arm--1"></div><div class="arm--2"></div><div class="hand"></div><div class="body"></div><div class="muzzle"></div><div class="eye--1"></div><div class="eye--2"></div><div class="nose"></div><div class="mouth"></div><div class="leg--1"></div><div class="leg--2"></div></div><div class="bear she"><div class="ear--1"></div><div class="ear--2"></div><div class="arm--1"></div><div class="arm--2"></div><div class="body"></div><div class="muzzle"></div><div class="eye--1"></div><div class="eye--2"></div><div class="nose"></div><div class="mouth"></div><div class="leg--1"></div><div class="leg--2"></div></div></div></div>到此这篇关于七个基于JavaScript实现的情⼈节表⽩特效的⽂章就介绍到这了,更多相关JavaScript表⽩特效内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。
JavaScript实现图像轮播特效教程
JavaScript实现图像轮播特效教程章节一:引言在现代网页设计中,图像轮播特效是非常常见的元素之一。
通过图像轮播特效,可以使网页更加动态、吸引人,提升用户体验。
本教程将介绍如何使用JavaScript实现图像轮播特效,并提供详细的步骤和示例代码。
章节二:基本结构首先,我们需要准备好轮播图的基本结构。
在HTML文件中,创建一个容器元素,用于包裹轮播图的图片和导航按钮。
然后,给容器元素添加一个唯一的ID,方便在JavaScript中进行操作。
章节三:样式设计接下来,我们需要为轮播图的容器元素和其中的图片设置样式。
使用CSS,可以设置容器元素的宽度和高度,以及图片的显示方式和过渡效果。
通过设置适当的样式,可以使轮播图在页面中居中显示,并可以根据需要进行自定义的设计。
章节四:添加JavaScript代码再接下来,我们需要使用JavaScript编写轮播图的逻辑代码。
首先,使用DOM操作获取到容器元素和其中的图片元素。
然后,使用数组或者类数组对象保存每张图片的路径或地址。
接下来,定义一个变量来存储当前显示的图片的索引。
然后,编写一个函数来实现图像切换的效果。
在函数中,通过改变图片元素的样式或属性,实现图片的切换。
同时,更新当前显示的图片的索引,以便进行下一次切换。
章节五:自动轮播功能除了手动切换图片,我们还可以添加自动轮播的功能。
使用JavaScript的定时器函数,可以定期触发图片切换的函数。
通过设置合适的时间间隔,可以实现自动轮播的效果。
同时,需要添加鼠标移入和移出事件,以便在用户鼠标悬停在图片上时停止轮播,鼠标离开时继续轮播。
章节六:导航按钮如果希望用户可以通过导航按钮来手动控制轮播图的切换,我们还需要添加导航按钮的功能。
在HTML文件中,创建相应数量的导航按钮,并为每个按钮设置一个特定的类名或索引属性。
在JavaScript中,使用事件委托的方式,监听导航按钮的点击事件。
当用户点击某个导航按钮时,获取该按钮的索引,然后调用图片切换函数,显示对应索引的图片。
js案例大全
js案例大全JavaScript(简称JS)是一种高级的、解释型的编程语言,它主要用于在网页上实现动态交互效果。
在网页开发中,JavaScript扮演着非常重要的角色,它可以帮助我们实现各种各样的功能和效果。
在本文中,我将为大家介绍一些常见的JavaScript案例,希望能够对大家的学习和工作有所帮助。
首先,我们来看一个简单的JavaScript案例,实现一个简单的计算器。
在这个案例中,我们可以使用JavaScript来编写一个简单的计算器,用户可以在网页上输入数字和运算符,然后点击“计算”按钮,就可以得到计算结果。
这个案例可以帮助我们了解如何使用JavaScript来处理用户的输入,并进行简单的数学运算。
接下来,我们可以看一个更加复杂的案例,实现一个图片轮播效果。
在这个案例中,我们可以使用JavaScript和CSS来实现一个图片轮播效果,用户可以在网页上点击“上一张”和“下一张”按钮来切换图片,也可以自动播放图片。
这个案例可以帮助我们了解如何使用JavaScript来操作DOM元素,以及如何结合CSS来实现动态效果。
除此之外,JavaScript还可以用来实现表单验证、动态加载数据、实现动画效果等等。
在网页开发中,JavaScript的应用非常广泛,它可以帮助我们实现各种各样的交互效果,让网页变得更加生动和有趣。
总的来说,JavaScript是一种非常强大的编程语言,它可以帮助我们实现各种各样的功能和效果。
通过学习和掌握JavaScript,我们可以为网页添加更多的交互效果,让用户体验变得更加丰富和多样化。
希望本文介绍的JavaScript案例能够对大家有所帮助,也希望大家能够在日常的网页开发中多多运用JavaScript,为用户带来更好的体验。
5个有趣的js代码
5个有趣的js代码很多⼈认为编程语⾔只是⽤于⼯作,没有什么乐趣,其实,只要我们发挥奇思妙想,再死板的东西也有有趣的⼀⾯。
这篇⽂章告诉⼤家:使⽤JavaScript,可以做很多很多有趣的事情。
以下代码拷贝到地址栏回车即可运⾏,赶紧试试吧。
1. ⽹页射击游戏这个游戏可以在任何⽹页⾥⾯玩,把下⾯代码粘贴到地址栏回车,按空格键进⾏射击,W键可前进,A、D键或者⽅向键可改变射击⽅向。
javascript:var%20s%20=%20document.createElement('script');s.type='text/javascript';document.body.appendChild(s);s.src='';void(0);2. 让图⽚飞起来只要把下⾯的代码贴到浏览器的地址栏⾥然后按Enter键,当前⽹页的所有图⽚都将动起来。
javascript:R=0; x1=.1; y1=.05; x2=.25; y2=.24; x3=1.6; y3=.24; x4=300; y4=200; x5=300; y5=200; var DI=document.getElementsByTagName("img"); DIL=DI.length; function A(){for(i=0; i<DIL; i++){DIS=DI[ i ].style; DIS.position='absolute';DIS.left=Math.sin(R*x1+i*x2+x3)*x4+x5+"px"; DIS.top=Math.cos(R*y1+i*y2+y3)*y4+y5+"px"}R++}tag=setInterval('A()',5);document.onmousedown=function(){clearInterval(tag);for(i=0; i<DIL; i++){DI[i].style.position="static";}}; void(0)3. 让⽹页可编辑此JavaScript代码,可以让你实时修改任何的⽹页,在Firefox中,你甚⾄可以把修改的⽹页保存到起来,对于⽹页设计者来说,这个功能可以辅助完善页⾯效果。
javaScript系列---【js动画特效--案例汇总】
javaScript系列---【js动画特效--案例汇总】案例1:⾃定义右击菜单<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>* {margin: 0;padding: 0;}#menu {width: 200px;height: 217px;background: tomato;/* 添加定位 */position: absolute;/* 默认隐藏 */display: none;}li {list-style: none;width: 200px;height: 30px;border-bottom: 1px solid white;}li:hover {background: skyblue;}body {height: 2000px;}</style></head><body><div id="menu"><ul><li>HTML</li><li>CSS</li><li>JavaScript</li><li>Node.js</li><li>Vue</li><li>React</li><li>⼩程序</li></ul></div><script>var menu = document.getElementById('menu');// 右击事件,取消默认事件document.oncontextmenu = function (e) {// 获取⿏标的位置, 赋值给菜单的定位e = e || window.event;// console.log(e.clientX, e.clientY); // 相对于可视区// console.log(e.pageX, e.pageY); // 相对于页⾯menu.style.left = e.pageX + 'px';menu.style.top = e.pageY + 'px';// 让⾃定义菜单显⽰menu.style.display = 'block';// 取消默认事件(默认的右击菜单不显⽰)return false;}// 点击页⾯,隐藏⾃定义菜单document.onclick = function () {menu.style.display = 'none';}</script></body></html>案例2:键盘控制元素移动<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>div {width: 100px;height: 100px;background: tomato;position: absolute;top: 300px;left: 300px;}</style></head><body><div id="box"></div><script>var box = document.getElementById('box');// 获取box的位置var l = parseInt(getStyle(box, 'left'));var t = parseInt(getStyle(box, 'top'));// console.log(l, t);// 监听键盘的按下document.onkeydown = function (e) {e = e || window.event;// console.log(e.keyCode);switch (e.keyCode) {case37:l--;break;case38:t--;break;case39:l++;break;case40:t++;break;}// 赋值box.style.left = l + 'px';box.style.top = t + 'px';}// 获取经过浏览器渲染的样式(⾏内样式内部样式外部样式)function getStyle(ele, attr) {return window.getComputedStyle ? window.getComputedStyle(ele)[attr] : ele.currentStyle[attr]; }</script></body></html>案例3:根据滚轮控制元素⼤⼩<body><div class="box"></div><script>var box = document.querySelector('.box');var h = 300; // box的⾼度// Chromebox.onmousewheel = wheel;// firefoxbox.addEventListener('DOMMouseScroll', wheel);function wheel(e) {var direction; // 表⽰⽅向 1表⽰向下 -1表⽰向上e = e || window.event;if (e.wheelDelta) { // chromeif (e.wheelDelta > 0) {// console.log('chrome--up');direction = -1;} else {// console.log('chrome--down');direction = 1;}} else { // firefoxif (e.detail > 0) {// console.log('firefox--down');direction = 1;} else {// console.log('firefox--up');direction = -1;}}// 根据⽅向修改box的⼤⼩h += direction;box.style.height = h + 'px';}</script></body>案例4:拖拽元素<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>div {width: 200px;height: 200px;background: tomato;position: absolute;top: 100px;left: 100px;}</style></head><body><div class="box">box</div><div class="box1">box1</div><script>var box = document.querySelector('.box');var box1 = document.querySelector('.box1');drag(box);drag(box1);function drag(ele) {// ⿏标在box上按下ele.onmousedown = function (e) {e = e || window.event;// 按下瞬间,计算误差var deltaX = e.clientX - ele.offsetLeft;var deltaY = e.clientY - ele.offsetTop;// console.log(deltaX, deltaY);// ⿏标在页⾯上移动document.onmousemove = function (e) {e = e || window.event;// console.log(e.clientX, e.clientY);// 计算当前的位置var l = e.clientX - deltaX;var t = e.clientY - deltaY;// 验收,限制范围if (l <= 0) l = 0;if (t <= 0) t = 0;// 获取屏幕的宽⾼var screenW = document.documentElement.clientWidth;var screenH = document.documentElement.clientHeight;if (l >= screenW - ele.offsetWidth) l = screenW - ele.offsetWidth;if (t >= screenH - ele.offsetHeight) t = screenH - ele.offsetHeight;// 赋值ele.style.left = l + 'px';ele.style.top = t + 'px';}}// ⿏标抬起, 取消移动事件document.onmouseup = function () {document.onmousemove = null;}}</script></body></html>案例5:碰撞检测<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>.box {width: 200px;height: 200px;background: orange;position: absolute;top: 200px;left: 200px;}.move {width: 100px;height: 100px;background: orange;position: absolute;top: 0;left: 0;}</style></head><body><div class="box">box</div><div class="move">move</div><script>var box = document.querySelector('.box');var move = document.querySelector('.move');// ⿏标在box上按下move.onmousedown = function (e) {e = e || window.event;// 按下瞬间,计算误差var deltaX = e.clientX - move.offsetLeft;var deltaY = e.clientY - move.offsetTop;// ⿏标在页⾯上移动document.onmousemove = function (e) {e = e || window.event;// 计算当前的位置var l = e.clientX - deltaX;var t = e.clientY - deltaY;// 验收,限制范围if (l <= 0) l = 0;if (t <= 0) t = 0;// 获取屏幕的宽⾼var screenW = document.documentElement.clientWidth;var screenH = document.documentElement.clientHeight;if (l >= screenW - move.offsetWidth) l = screenW - move.offsetWidth;if (t >= screenH - move.offsetHeight) t = screenH - move.offsetHeight;// 赋值,移动move.style.left = l + 'px';move.style.top = t + 'px';// 移动的过程中进⾏判断碰撞if (move.offsetLeft + move.offsetWidth >= box.offsetLeft && move.offsetTop + move.offsetHeight >= box.offsetTop && box.offsetLeft + box.offsetWidth >= move.offsetLeft && box.offsetTop + box.offsetHeight >= move.offsetTop) move.style.background = 'blue';} else {move.style.background = 'orange';}}return false;}// ⿏标抬起, 取消移动事件document.onmouseup = function () {document.onmousemove = null;}</script></body></html>案例6:改变元素多个任意属性(透明度左/右等属性)<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>.box1 {width: 100px;height: 100px;position: absolute;top: 0;left: 0;background: blue;}</style></head><body><div class="box1"></div><script> //获取元素var box1 = document.querySelector('.box1');box1.onclick = function () {bufferMove(box1, { 'left': 500, 'top': 100 });}// 缓冲运动函数// ele: 元素 targetJson: ⽬标json值// 约定opacity在传参时⼿动放⼤100倍function bufferMove(ele, targetJson) {// 清除定时器clearInterval(ele.timer);// 把定时器作为⾃定属性绑定在元素上,多个不同元素之间不会相互影响ele.timer = setInterval(function () {// 假定已经到了终点(声明变量为true), 在forin中每次⾛完⼀步, 对当前位置进⾏判断, 如果有任意属性未到终点(变量变为false), 直到有⼀次全部都到达终点, 变量在forin执⾏完毕后仍为true, 停⽌定时器var tag = true;// 遍历targetJsonfor (var attr in targetJson) {if (attr == 'opacity') {// 获取元素当前透明度(放⼤100倍)var nowattr = parseInt(getStyle(ele, attr) * 100);} else {var nowattr = parseInt(getStyle(ele, attr));}// 计算步长: (⽬标值-当前值)/⽐例var step = (targetJson[attr] - nowattr) / 10;// 对步长进⾏判断,如果是正⽅向运⾏向上取整,如果是负⽅向运⾏向下取整step = step > 0 ? Math.ceil(step) : Math.floor(step);// console.log(step);// 加上步长nowattr += step;// 赋值if (attr == 'opacity') {// 赋值(透明度缩⼩100倍)ele.style[attr] = nowattr / 100;} else { ele.style[attr] = nowattr + 'px';}// 有属性未到终点,变量变成falseif (nowattr != targetJson[attr]) {tag = false;}}// 如果forin执⾏完毕tag仍未true,表⽰全部到达终点if (tag) {clearInterval(ele.timer);}}, 50);}// 获取计算后样式function getStyle(ele, attr) {return window.getComputedStyle ? window.getComputedStyle(ele)[attr] : el e.currentStyle[attr];}</script></body></html>案例7:运动函数添加回调函数<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>.box1 {width: 100px;height: 100px;position: absolute;top: 0;left: 0;background: blue;}</style></head><body><div class="box1"></div><script src="../ujiuye.js"></script><script>var box1 = document.querySelector('.box1');box1.onclick = function () {bufferMove(box1, { 'left': 500, 'top': 1 }, function () {box1.style.background = 'pink';});}</script></body></html>。
用JavaScript来实现的超炫组织结构图
⽤JavaScript来实现的超炫组织结构图⽤JavaScript来实现的超炫组织结构图 到新公司实习第七天,Boos就让我做个组织架构,⽤来展⽰⼈员关系图...然后就开始了我的code,不经意间在Github上看到了⼀个可以⽣成⾮常酷炫的节点图形,我选择了其中⼀种spacetree类型做为我的组织结构图基础,这类库种类很多,功能⾮常强⼤,⾮常适合复杂的图形功能需求spacetree 这种图形可以⽀持⼀下特性:⽀持向上下左右四个⽅向展开图表⽀持⼦节点扩展⽀持图表拖放 ⽀持图表缩放 html: <!-- JIT Library File --><script language="javascript" type="text/javascript" src="/public/javascripts/jit.js"></script><!-- Example File --><script language="javascript" type="text/javascript" src="/public/javascripts/example1.js"></script><div><div id="container"><div id="center-container"><div id="infovis"></div></div><div id="log"></div></div></div><script type="text/javascript">window.onload=init();</script>var labelType, useGradients, nativeTextSupport, animate;(function() {var ua = erAgent,iStuff = ua.match(/iPhone/i) || ua.match(/iPad/i),typeOfCanvas = typeof HTMLCanvasElement,nativeCanvasSupport = (typeOfCanvas == 'object' || typeOfCanvas == 'function'),textSupport = nativeCanvasSupport&& (typeof document.createElement('canvas').getContext('2d').fillText == 'function');//I'm setting this based on the fact that ExCanvas provides text support for IE//and that as of today iPhone/iPad current text support is lamelabelType = (!nativeCanvasSupport || (textSupport && !iStuff))? 'Native' : 'HTML';nativeTextSupport = labelType == 'Native';useGradients = nativeCanvasSupport;animate = !(iStuff || !nativeCanvasSupport);})();var Log = {elem: false,write: function(text){if (!this.elem)this.elem = document.getElementById('log');this.elem.innerHTML = text;this.elem.style.left = (500 - this.elem.offsetWidth / 2) + 'px';}};function init(){var json;$.ajax({type: "GET",url: "/home/spacetreeJSON",data: {username:$("#username").val(), content:$("#content").val()},dataType: "json",async: false,success: function(data){if(data.result=="success"){json=.json;}console.log(.json);}});//init Spacetree//Create a new ST instancevar st = new $jit.ST({//id of viz container elementinjectInto: 'infovis',//set duration for the animationduration: 800,//set animation transition typetransition: $jit.Trans.Quart.easeInOut,//set distance between node and its childrenlevelDistance: 50,//enable panningNavigation: {enable:true,panning:true},//set node and edge styles//set overridable=true for styling individual//nodes or edgesNode: {height: 20,width: 100,type: 'rectangle',color: '#aaa',overridable: true},Edge: {type: 'bezier',overridable: true},onBeforeCompute: function(node){Log.write("loading " + );},onAfterCompute: function(){Log.write("done");},//This method is called on DOM label creation.//Use this method to add event handlers and styles to//your node.onCreateLabel: function(label, node){label.id = node.id;label.innerHTML = ;label.onclick = function(){// if(normal.checked) {st.onClick(node.id);// } else {// st.setRoot(node.id, 'animate');// }};//set label stylesvar style = label.style;style.width = 100 + 'px';style.height = 17 + 'px';style.cursor = 'pointer';style.color = '#333';style.fontSize = '0.8em';style.textAlign= 'center';style.paddingTop = '3px';},//This method is called right before plotting//a node. It's useful for changing an individual node//style properties before plotting it.//The data properties prefixed with a dollar//sign will override the global node style properties.onBeforePlotNode: function(node){//add some color to the nodes in the path between the//root node and the selected node.if (node.selected) {node.data.$color = "#ff7";}else {delete node.data.$color;//if the node belongs to the last plotted levelif(!node.anySubnode("exist")) {//count children numbervar count = 0;node.eachSubnode(function(n) { count++; });//assign a node color based on//how many children it hasnode.data.$color = ['#aaa', '#baa', '#caa', '#daa', '#eaa', '#faa'][count];}}},//This method is called right before plotting//an edge. It's useful for changing an individual edge//style properties before plotting it.//Edge data proprties prefixed with a dollar sign will//override the Edge global style properties.onBeforePlotLine: function(adj){if (adj.nodeFrom.selected && adj.nodeTo.selected) {adj.data.$color = "#eed";adj.data.$lineWidth = 3;}else {delete adj.data.$color;delete adj.data.$lineWidth;}}});//load json datast.loadJSON(json);//compute node positions and layoutpute();//optional: make a translation of the treest.geom.translate(new $plex(-200, 0), "current");//emulate a click on the root node.st.onClick(st.root);}如上js代码是⽤的spacetree⽅式,重写的jit.ST⽅法,这⾥有⼀点需要注意,就是获取json的时候建议ajax异步获取数据改为同步获取,即 async: false。
分享一个阿里云轻量级开源前端图编排,流程图js组件——butterfly-dag
分享⼀个阿⾥云轻量级开源前端图编排,流程图js组件——butterfly-dag背景在阿⾥云,可能每时每刻都在⾝边充斥着“数据表”“模型”“调度”等等抽象概念。
作为阿⾥云的前端,如何将这种抽象的概念实体化可视化地给客户或者其他合作伙伴展⽰出来显得尤为重要。
与此同时,在阿⾥云智能事业部门的孵化速度和迭代速度⼤⼤超乎⼤家的想象,总结起来就是“⼈少事多繁琐”,经常出现拉1-2个同学两周内就开始孵化⼀个项⽬,此时,业界内各种搭建系统能缓解⼀部分的⼯作量,可是当遇到了可视化“编排”,“流程图”,“关系图”这种场景,就显得捉襟见肘了。
通过盘点在不同业务⽀持过的此类场景,总结DAG⾯临以下痛点:产品业务逻辑复杂,且形态差异⼤样式丰富,交互复杂且有较⾼视觉质量诉求定制性要求⾼,开发速度要求快解决⽅案脱胎于阿⾥云数据智能事业部实际的业务场景,在覆盖了我们业务需求的情况下,同时⽀持了多个兄弟部门抽象出来的前端图组件库,其特性如下:“零件式开发”,定制性强,⼊门门槛低:利⽤了DOM的便利性,提供⾮常强⼤的样式定制和复杂的交互定制的能⼒// 继承式的定制const Node = require('butterfly-dag').Node;class ANode extends Node {draw(obj) {// "零件式"开发,把最终的dom返回给我即可}// 随意⾃⼰拓展⽅法}canvas.draw({nodes: [{id: 'xxxx',top: 100,left: 100,Class: ANode //设置基类之后,画布会根据⾃定义的类来渲染}]})画布常规功能⼀应俱全:Minmap、⽹格系统、对齐线、框选、redo/undo、画布缩放和平移、线段动画、⾃动布局等等。
更细腻更⼈性化的交互,后续我们将花更多的精⼒聚焦更智能的交互:聚焦部分节点 & 聚焦画布框选更智能化。
JavaScript网页特效案例教程教案(普通班)
JavaScript网页特效案例教程教案(普通班)一、教学目标1. 让学生了解JavaScript在网页中的应用和重要性。
2. 培养学生掌握基本的JavaScript语法和编程技巧。
3. 引导学生学会使用JavaScript实现常见的网页特效。
二、教学内容1. JavaScript简介:介绍JavaScript的概念、作用和应用场景。
2. 基本语法:讲解JavaScript的基本语法,包括变量、数据类型、运算符、条件语句和循环语句。
3. 函数:介绍函数的定义和调用,讲解自定义函数和内置函数的使用。
4. DOM操作:讲解DOM(文档对象模型)的基本概念,以及如何使用JavaScript操作DOM元素。
5. 事件处理:介绍事件的概念,讲解如何使用JavaScript处理各种浏览器事件。
三、教学方法1. 讲授法:讲解JavaScript的基本语法、函数、DOM操作和事件处理等内容。
2. 案例教学法:通过分析实例,让学生学会使用JavaScript实现常见的网页特效。
3. 互动教学法:鼓励学生提问和参与讨论,提高学生的学习兴趣和积极性。
1. 教室环境:确保教室具备投影仪等多媒体设备,以便进行课件演示和案例分析。
2. 教学课件:准备JavaScript基本语法、函数、DOM操作和事件处理等内容的课件。
3. 案例素材:准备一些经典的JavaScript网页特效案例,用于教学和实践。
五、教学评价1. 课堂参与度:观察学生在课堂上的提问、回答问题和参与讨论的情况,评价学生的学习积极性。
2. 课后作业:布置相关的编程作业,评价学生对JavaScript知识的掌握程度。
3. 案例实践:让学生完成一些简单的JavaScript网页特效案例,评价学生的实际操作能力。
六、教学安排1. 课时:共计32课时,每课时45分钟。
2. 课程安排:第1-4课时:JavaScript简介及基本语法第5-8课时:函数、变量和数据类型第9-12课时:DOM操作第13-16课时:事件处理第17-20课时:案例分析与实践1. 案例一:点亮灯泡效果描述:当用户鼠标悬停在按钮上时,按钮上的灯泡图像点亮。
JavaScript图形实例:黄金螺旋线
JavaScript图形实例:黄金螺旋线黄金螺旋线是根据斐波那契数列画出来的螺旋曲线。
自然界中存在许多黄金螺旋线的图案,是自然界最完美的经典黄金比例。
例如,如图1所示的海螺身上的曲线,图2所示的漩涡,图3所示的人耳。
图1 海螺图2 漩涡图3 人耳又如,名画蒙娜丽莎的微笑整个画面所呈现的数学美,如图4所示。
图4 蒙娜丽莎的微笑黄金螺旋线的绘制思想是:以斐波那契数为边长的正方形拼成长方形,然后在正方形里面画一个90度的弧线,连接起来的弧线就是黄金螺旋线。
例如,先绘制一个边长为8的正方形,再在边长为8的正方形左侧贴着其底边的左沿线作出一个边长为5的正方形,如图5;接着按照图5的样子分别作出边长为3和边长为2的正方形,最后作出两个边长为1的正方形。
这6个正方形构成一个长为13、宽为8的长方形。
图5 6个正方形构成一个长为13、宽为8的长方形在每个正方形内画出圆弧,顺次连接起来作出一条如图6所示的黄金螺旋线。
图6 作出的黄金螺旋线为在Canvas画布中作出如图6所示的黄金螺旋线,编写如下的HTML代码。
<!DOCTYPE html><head><title>黄金螺旋线</title><script type="text/javascript">function draw(id){var canvas=document.getElementById(id);if (canvas==null)return false;var context=canvas.getContext('2d');context.fillStyle="red";context.fillRect(0,0,400,300);context.lineWidth=3;context.translate(80,100);var r=20context.beginPath();context.arc(5*r,2*r,1*r,Math.PI,Math.PI*2,true);context.arc(4*r,2*r,2*r,0,Math.PI*3/2,true);context.arc(4*r,3*r,3*r,Math.PI*3/2,Math.PI,true);context.arc(6*r,3*r,5*r,Math.PI,Math.PI/2,true);context.arc(6*r,0,8*r,Math.PI/2,Math.PI*2,true);context.strokeStyle = 'yellow';context.stroke();}</script></head><body onload="draw('myCanvas');"><canvas id="myCanvas" width="400" height="300"></canvas></body></html>将上述HTML代码保存到一个html文本文件中,再在浏览器中打开包含这段HTML 代码的html文件,可以看到在浏览器窗口中绘制出一条黄金螺旋线,如图7所示。
JS小案例总结(JS基础案例)
JS小案例总结(JS基础案例)1.计算器案例:设计一个简单的计算器,可以进行加减乘除运算。
用户输入两个数字和运算符,点击按钮后显示结果。
该案例主要练习了JS的基本运算符和逻辑控制。
通过获取输入的数字和运算符,可以通过if-else语句判断进行相应的运算,并将结果输出。
总结:这个案例对于理解JS的基本运算符以及if-else语句非常有帮助。
同时,在处理用户输入的时候,还需要进行一些输入校验和异常处理,提高了代码的健壮性。
2.倒计时案例:设计一个倒计时的功能,可以设置倒计时的时间,然后每秒钟更新显示倒计时的时间。
该案例主要练习了JS的定时器和时间操作。
通过setInterval函数可以每秒钟触发一次更新时间的函数,并将结果输出。
总结:这个案例对于理解JS的定时器非常有帮助,同时也加深了对于时间处理的理解。
在实际项目中,倒计时功能是非常常见的需求。
3.轮播图案例:设计一个轮播图功能,可以左右滑动切换图片,并且自动播放图片。
该案例主要练习了JS的事件处理和DOM操作。
通过监听左右滑动的事件,可以进行相应的图片切换,并通过定时器实现自动播放功能。
总结:这个案例对于理解JS的事件处理和DOM操作非常有帮助。
在实际项目中,轮播图功能是非常常见的需求,通过这个案例可以学习到具体的实现方式。
4.表单验证案例:设计一个表单验证的功能,可以对用户输入的内容进行校验,并给出提示信息。
该案例主要练习了JS的表单操作和正则表达式。
通过监听表单的提交事件,可以对用户输入的内容进行检查,并给出相应的提示。
总结:这个案例对于理解JS的表单操作和正则表达式非常有帮助。
表单验证是Web开发中常见的需求,通过这个案例可以学习到基本的表单验证方式。
以上是几个常见的JS小案例及我的总结。
通过这些案例的实践,可以加深对JS的基础知识的理解,并提高编程能力。
当然,在实际项目中,还会遇到更加复杂的需求和问题,但通过这些小案例的学习,可以为后续的学习和实践打下坚实的基础。
中国结的编程代码
中国结的编程代码
如果你想用编程代码来生成中国结的图案,可以使用各种编程语言和图形库。
这里是一个使用Python和turtle库来绘制一个简单的中国结图案的例子:import turtle
# 创建画布和画笔
canvas = turtle.Screen()
pen = turtle.Turtle()
# 设置画笔颜色和宽度
pen.color('red')
pen.width(3)
# 绘制中国结的主体部分
for i in range(2):
pen.forward(100)
pen.right(90)
pen.forward(100)
pen.right(120)
pen.forward(100)
pen.right(90)
pen.forward(100)
pen.right(120)
# 绘制中国结的装饰部分
pen.color('green')
pen.width(2)
pen.right(60)
pen.forward(40)
pen.backward(40)
# 完成绘制,隐藏画笔
pen.hideturtle()
canvas.exitonclick()
这段代码将使用turtle库来绘制一个简单的中国结图案。
你可以根据自己的需要修改颜色、线条宽度和形状等参数。
JavaScript奇技淫巧:图片加密
JavaScript奇技淫巧:图片加密本文将用JavaScript实现两个颇有技术含量的功能:图片压缩、图片加密。
最终效果:可实现将任意图片加密、压缩,并保存到一个独立的html页面中,输入正确的密码,才能看到原图。
压缩图片技术原理将图片读入canvas,并使用canvas的toDataURL方法将图片base64化,在此过程中,可以设定quality 值,即图片质量值,值为0.1到1之间,值越小,压缩度越高。
源码<html><body><script src="jquery-3.5.1.min.js"></script><input id="file" type="file" capture="microphone" accept="image/*"><br>压缩后的图片:<span id="sz" style="font-size: 36px;"></span><br><img id="pic" style="width:400px;"><script>$("#file").change(function() {var m_this = this;cutImageBase64(m_this, null, 900, 0.7);})function cutImageBase64(m_this, id, wid, quality) {var file = m_this.files[0];var URL = window.URL || window.webkitURL;var blob = URL.createObjectURL(file);var base64;var img = new Image();img.src = blob;img.onload = function() {var that = this;//生成比例var w = that.width, h = that.height, scale = w / h;w = wid || w;h = w / scale;//生成canvasvar canvas = document.createElement('canvas');var ctx = canvas.getContext('2d');$(canvas).attr({width: w,height: h});ctx.drawImage(that, 0, 0, w, h);//将图片转为base64编码base64 = canvas.toDataURL('image/jpeg', quality || 0.9);document.getElementById("pic").src = base64;document.getElementById("sz").innerHTML = parseInt(base64.length / 2014, 0) + "kb";};}</script></body></html>运行效果压缩率本例,运行时加载任何一张本地图片。
JavaScript图形实例:太极图
JavaScript图形实例:太极图在Canvas API中,上下文CanvasRenderingContext2D对象提供了一个绘制圆与圆弧的方法,其基本格式为:void arc(in float x, in float y, in float radius, in float startAngle, in float endAngle, in boolean anticlockwise);其中,参数x和y是圆心坐标,radius是半径,startAngle和endAngle则是扇形的起始角度和终止角度(以弧度表示),anticlockwise表示作图时应该逆时针画(true)还是顺时针画(false)。
1.太极图通过绘制4个半圆弧和两个小圆的方式可以绘制一个太极图。
编写HTML文件的内容如下。
<!DOCTYPE html><head><title>太极图</title><script type="text/javascript">function draw(id){var canvas=document.getElementById(id);if (canvas==null)return false;var context=canvas.getContext('2d');context.fillStyle="#EEEEFF";context.fillRect(0,0,400,400);context.strokeStyle ='black';context.lineWidth = 2;context.beginPath();context.arc(200,200,150,Math.PI/2,3*Math.PI/2,false);context.arc(200,125,75,3*Math.PI/2,Math.PI/2,false);context.arc(200,275,75,3*Math.PI/2,Math.PI/2,true);context.fillStyle='black';context.fill();context.arc(200,200,150,Math.PI/2,3*Math.PI/2,true);context.stroke();context.beginPath();context.arc(200,275,150*0.15,0,2*Math.PI,false);context.fill();context.beginPath();context.arc(200,125,150*0.15,0,2*Math.PI,false);context.fillStyle ='#EEEEFF';context.fill();}</script></head><body onload="draw('myCanvas');"><canvas id="myCanvas" width="400" height="400" style="border:3px double #996633;"> </canvas></body></html>在浏览器中打开包含这段HTML代码的html文件,可以看到在画布中绘制出如图1所示的太极图。
canvas——javascript实现各种复杂规律图案
canvas——javascript实现各种复杂规律图案 在HTML5中新增的元素中,个⼈最喜欢的就是canvas元素。
这个元素负责在页⾯⾥设定⼀个区域,然后在这个区域内通过javascript动态绘制图形。
⽬前⼤部分浏览器新版本都⽀持此元素。
canvas元素具备绘图能⼒的上下⽂环境,另外还建议了⼀个名为WebGL的3D上下⽂,但是⽬前⼤部分浏览器对canvas的3D上下⽂⽀持不够好,特别是⽼版本的浏览器,甚⾄在window xp中缺少⽀持必要的绘图驱动程序。
那么,今天我们就在2d上下⽂中,共同探讨下这个⾮常有意思的新元素。
要使⽤canvas元素,必须先设置其width和height,默认值分别为300和150。
设置的时候有点奇怪,使⽤CSS设置不成功,必须使⽤内联属性style⽅式。
这⾥就不追究原因,猜想是对元素的⽀持不够完善。
要在这个画布canvas上绘图,就先得取得绘图上下⽂,⽽取得绘图上下⽂对象的引⽤,就得先调⽤getContent()⽅法并传⼊上下⽂的名字如:2d。
记得保持良好的编程习惯,使⽤新⽅法时,先检测⽅法是否存在,其中的好处相信⼤家都知道。
2d上下⽂中绘制的图形,⾮常神奇吧!那接下来看看怎么做到的? 使⽤2d上下⽂提供的⽅法,可以绘制⼀些相对简单的图形,例如:矩形、弧形、圆形、路径等。
上⾯图形其实也是路径,只不过加⼊了⼀些相对⿇烦的三⾓函数的算法。
2D上下⽂中的坐标起始于canvas元素的左上⾓。
所有的坐标值都是基于这个点,当然可以通过上下⽂中提供的translate()改变原点坐标。
⼤部分2D上下⽂操作都属于填充和描边两个操作,⽽操作的结果⼜取决于两个属性:fillStyle和strokeStyle。
这两个属性的值可以为字符串、渐变对象和模式对象。
绘制矩形 与矩形相关的⽅法包括:fillRect()、strokeRect()和clearRect()。
这三个⽅法都接受四个参数:X坐标、Y坐标、宽度、⾼度,默认单位像素,所以后⾯不⽤再跟单位。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
JavaScript图形实例:蝴蝶结图案
1.长短瓣相间的蝴蝶结
设定曲线的坐标方程为:
b=r*(1+cos(n*θ)/4)*(1+sin(2*n*θ));
x1=b*cos(θ);
x2=b*cos(θ+π/8);
y1=b*Math.sin(θ);
y2=b*Math.sin(θ+π/8); (0≤θ≤2π,2≤n≤5)
在0~2π区间中从θ=0开始,每隔π/360按曲线方程求得两个点的坐标值(x1,y1)和(x2,y2),并将求得的两点连成一条线段,这样,可以得到一个长短瓣相间的蝴蝶结图案。
编写如下的HTML代码。
<!DOCTYPE html>
<head>
<title>长短瓣相间的蝴蝶结</title>
<script type="text/javascript">
function draw(id)
{
var canvas=document.getElementById(id);
if (canvas==null)
return false;
var context=canvas.getContext('2d');
context.fillStyle="#EEEEFF";
context.fillRect(0,0,400,300);
context.strokeStyle="red";
context.lineWidth=1;
context.beginPath();
var n=3;
for (theta=0;theta<=2*Math.PI;theta+=Math.PI/360)
{
e=60*(1+Math.cos(n*theta)/4);
f=e*(1+Math.sin(2*n*theta));
x1=200+f*Math.cos(theta);
x2=200+f*Math.cos(theta+Math.PI/8);
y1=150-f*Math.sin(theta);
y2=150-f*Math.sin(theta+Math.PI/8);
context.moveTo(x1,y1);
context.lineTo(x2,y2);
}
context.closePath();
context.stroke();
}
</script>
</head>
<body onload="draw('myCanvas');">
<canvas id="myCanvas" width="400" height="300"></canvas>
</body>
</html>
将上述HTML代码保存到一个html文本文件中,再在浏览器中打开包含这段HTML 代码的html文件,可以看到在浏览器窗口中绘制出的长短各三瓣相间的蝴蝶结图案,如图1所示。
图1 长短各三瓣相间的蝴蝶结
若将上面代码中的“var n=3;”改写为“var n=2;”或“var n=4;”在在浏览器窗口中会分别绘制出的长短各两瓣或长短各四瓣相间的蝴蝶结图案,如图2和图3所示。
图2 长短各两瓣相间的蝴蝶结
图3 长短各四瓣相间的蝴蝶结
还可以将上面求取坐标的三角函数加上不同的相位,例如将代码中的语句
“y1=150-f*Math.sin(theta);”改写为“y1=150-f*Math.sin(theta+Math.PI/4);”,则在画布中绘制的图案如图4所示。
图4 Y1中SIN函数加上相位后绘制的图案
2.长短瓣相间的蝴蝶结的绘制过程
将长短瓣相间的蝴蝶结的绘制过程进行动态展示,编写的HTML文件内容如下。
<!DOCTYPE html>
<head>
<title>长短瓣相间的蝴蝶结绘制过程的动态展示</title>
<script type="text/javascript">
var context;
var n;
var theta;
function draw(id)
{
var canvas = document.getElementById(id);
if (canvas == null)
return false;
context = canvas.getContext('2d');
context.fillStyle="#EEEEFF";
context.fillRect(0,0,400,300);
n=2;
theta=0;
setInterval(go,30);
}
function go()
{
context.strokeStyle="red";
context.lineWidth=1;
context.beginPath();
e=60*(1+Math.cos(n*theta)/4);
f=e*(1+Math.sin(2*n*theta));
x1=200+f*Math.cos(theta);
x2=200+f*Math.cos(theta+Math.PI/8);
y1=150-f*Math.sin(theta);
y2=150-f*Math.sin(theta+Math.PI/8);
context.moveTo(x1,y1);
context.lineTo(x2,y2);
context.closePath();
context.stroke();
theta+=Math.PI/360;
if (theta>2*Math.PI)
{
n++; if (n>5) n=2;
theta=0;
context.clearRect(0,0,400,300);
}
}
</script>
</head>
<body onload="draw('myCanvas');">
<canvas id="myCanvas" width="400" height="300" style="border:3px double #996633;"> </canvas>
</body>
</html>
将上述HTML代码保存到一个html文本文件中,再在浏览器中打开包含这段HTML 代码的html文件,可以看到在浏览器窗口中呈现出长短相间的蝴蝶结图案从各两瓣到三瓣再到四瓣直到五瓣的绘制过程,如图5所示。
图5 长短瓣相间的蝴蝶结绘制过程的动态展示。