JS常见网页特效案例

本文介绍了四个常见的JavaScript网页特效案例:包括网页轮播图的实现,页面滚动时的返回顶部功能,筋斗云效果,以及针对移动端优化的轮播图展示。这些特效能提升用户体验,丰富网站互动性。

1、网页轮播图

在这里插入图片描述
在这里插入图片描述

window.addEventListener('load', function() {
	// 1)获取元素
	var arrow_l = document.querySelector('.arrow_l');
	var arrow_r = document.querySelector('.arrow_r');
	var focus = document.querySelector('.focus');
	
	// 2)鼠标经过轮播图 显示隐藏左右按钮
	focus.addEventListener('mouseenter', function() {
		arrow_l.style.display = 'block';
		arrow_r.style.display = 'block';
		clearInterval(timer);
		// 变量不用,要清空
		timer = null;
	});
	focus.addEventListener('mouseleave', function() {
		arrow_l.style.display = 'none';
		arrow_r.style.display = 'none';
		// 开启定时器
		timer = setInterval(function() {
			// 手动调用点击事件
			arrow_r.onclick();
		}, 2000);
		
	});
	// 3) 动态生成小圆圈 有几张图片,就生成几个小圆圈
	// 获取ul对象 必须限定是谁的ul
	var ul = focus.querySelector('ul');
	var ol = focus.querySelector('ol');
	var focusWidth = focus.offsetWidth; // 轮播图盒子的宽度
	// ol下li的个数取决于ul下li的个数
	for (var i = 0; i < ul.children.length; i++) {
		// 创建小li
		var li = document.createElement('li');
		//记录当前小圆圈的索引号 通过自定义属性来做
		li.setAttribute('index',i);
		// 把li插入ol里面
		ol.appendChild(li);
		// 4)小圆圈的排他思想
		li.addEventListener('click', function() {
			for (var i = 0; i < ol.children.length; i++) {
				// 清除所有的小li 的current 类
				ol.children[i].className = '';
			}
			// 当前的小 li 设置 current 类
			this.className = 'current';
			// 5)点击小圆圈,移动图片 移动的是ul
			// 点击当前小圆圈,获取索引
			var index = this.getAttribute('index');
			// 点击了某个小li 要把这个li的索引号给num
			num = index;
			// 点击了某个小li 要把这个li的索引号给circle
			circle = index;
			// ul移动距离的算法: 小圆圈的索引号 乘以 图片的宽度
			animate(ul, -index*focusWidth);
		});
	}
	// ol里面的第一个li设置类名为 current,默认选择第一个li
	ol.children[0].className = 'current';
	// 6)克隆第一张图片(li)放到ul最后面
	var first = ul.children[0].cloneNode(true);
	// 克隆是在生成小圈圈的下面,所以小圆圈不会随图片的个数增加而增加
	ul.appendChild(first);
	// 7) 点击右侧按钮,图片滚动一张
	// 控制图片的播放
	var num = 0;
	// 控制小圆圈的播放
	var circle = 0;
	// flag 节流阀
	var flag = true;
	// 9)右侧按钮做法
	arrow_r.addEventListener('click', function() {
		if (flag) {
			flag = false;
			// 如果走到了最后复制的那张图片,此时 ul要快速复原 left 改为 0
			if (num == ul.children.length - 1) {
				ul.style.left = 0;
				num = 0;
			}
			num++; // 变量自加1
			// 图片移动的距离:num * 图片的宽度
			animate(ul, num * focusWidth, function() {
				// 前一个图片播放完毕,打开节流阀,才能播放下一张图片
				flag = true;
			});
			circle++;
			// 由于克隆了一个张图片,而小圆圈比图片少了一个,所以要给circle做一下判断,让小圆圈复原
			if (circle == ol.children.length) {
				circle = 0;
			}
			circleChange()
		}
	});
	// 10)左侧按钮做法
	arrow_l.addEventListener('click', function() {
		if (flag) {
			flag = false;
			// 如果走到了最后复制的那张图片,此时 ul要快速复原 left 改为 0
			if (num == 0) {
				num = ul.children.length - 1;
				ul.style.left = -num * focusWidth + 'px';
			}
			num--; 
			// 图片移动的距离:num * 图片的宽度
			animate(ul, -num * focusWidth, function() {
				flag = true;
			});
			circle++;
			
			if (circle < 0) {
				circle = ol.children.length - 1;
			}
			circleChange()
		}
	});
	// 如果有公用的代码块,可以封装成函数
	function circleChange() {
		// 8)先清除其余小圆圈的current类名
		for (var i = 0; i < ol.children.length; i++) {
			ol.children[i].className = '';
		}
		// 留下当前的小圆圈的current类名
		ol.children[circle].className = 'current';
	}
	// 自动播放轮播图
	var timer = setInterval(function() {
		// 手动调用点击事件
		arrow_r.onclick();
	}, 2000);
	// 动画函数的封装 动画必须要定位 obj 目标对象 target 目标位置
	function animate(obj, target, callback) {
		// 如果不断点击,导致动画速度变快,因为开启太多的定时器,解决方案:让元素只有一个定时器执行
		// 先清除以前的定时器,只保留当前的一个定时器执行
		clearInterval(obj.timer);
		// 给不同的元素指定了不同的定时器
		obj.timer /* 不用给timer开辟新的内存空间,而是使用的是obj的一个属行,这样做节省资源,提高性能*/ = setInterval(function() {
			// 步长值写在定时器里面 步长公式:(目标值 - 现在的位置) / 10
			var step = (target - obj.offsetLeft) / 10;
			// 小数要取整 才能保证盒子移动到整数目标位置
			step = step > 0 ? Math.ceil(step) : Math.floor(step);
			if (obj.offsetLeft == target) {
				// 停止动画,本质是停止定时器
				clearInterval(obj.timer);
				// 回调函数一定写在定时器结束里面
				// if (callback) {
				// 	callback();
				// }
				callback&&callback();
			}
			// 盒子移动距离
			// 把每次加1 这个步长值改为一个慢慢变小的值 
			// obj.style.left = obj.offsetLeft + 1 + 'px';
			obj.style.left = obj.offsetLeft + step + 'px';
	
		}, 30);
	}
});

2、返回顶部

在这里插入图片描述
在这里插入图片描述

<body>
	<div class="slider-bar">
		<span class="goBack">返回顶部</span>
	</div>
	<div class="header">头部区域</div>
	<div class="banner">banner区域</div>
	<div class="main w">主体部分</div>
	<script>
		var sliderbar = document.querySelector('.slider-bar');
		var banner = document.querySelector('.banner');
		var main = document.querySelector('.main');
		var goback = document.querySelector('.goBack');
		// banner.offsetTop 被卷去头部的大小,一定要写在外面
		var bannerTop = banner.offsetTop;
		// 固定定位之后应该变化的数值
		var sliderbarTop = sliderbar.offsetTop - bannerTop;
		var mainTop = main.offsetTop;
		// 页面滚动事件
		document.addEventListener('scroll', function() {
			// window.pageYOffset 页面被卷去的头部
			cconsole.log(window.pageYOffset);
			// 当页面被卷去的头部大于等于 172 时, 侧边栏就改为固定定位
			if (window.pageYOffset >= bannerTop) {
				sliderbar.style.position = 'fixed';
				sliderbar.style.top = sliderbarTop + 'px';
			} else {
				sliderbar.style.position = 'absolute';
				sliderbar.style.top = '300px';
			}
			// 页面滚动到main盒子,就显示goback模块
			if (window.pageYOffset >= mainTop) {
				goback.style.display = 'block';
			} else {
				goback.style.display = 'none';
			}
		});
		
		// 3) 当我们点击了返回顶部模块,就让窗口滚动到页面的最上方
		goBack.addEventListener('click', function() {
			// 是窗口滚动,所以对象是window
			animate(window, 0);
		});
		// 动画函数
		function animate(obj, target, callback) {
			// 如果不断点击,导致动画速度变快,因为开启太多的定时器,解决方案:让元素只有一个定时器执行
			// 先清除以前的定时器,只保留当前的一个定时器执行
			clearInterval(obj.timer);
			// 给不同的元素指定了不同的定时器
			obj.timer /* 不用给timer开辟新的内存空间,而是使用的是obj的一个属行,这样做节省资源,提高性能*/ = setInterval(function() {
				// 步长值写在定时器里面 步长公式:(目标值 - 现在的位置) / 10
				var step = (target - window.pageYOffset) / 10;
				// 小数要取整 才能保证盒子移动到整数目标位置
				step = step > 0 ? Math.ceil(step) : Math.floor(step);
				if (window.pageYOffset == target) {
					// 停止动画,本质是停止定时器
					clearInterval(obj.timer);
					// 回调函数一定写在定时器结束里面
					// if (callback) {
					// 	callback();
					// }
					callback&&callback();
				}
				// 盒子移动距离
				// 把每次加1 这个步长值改为一个慢慢变小的值 
				// obj.style.left = window.pageYOffset + 1 + 'px';
				window.scroll(0, window.pageYOffset + step);
			}, 30);
		}
		
	</script>
</body>

3、筋斗云案例

在这里插入图片描述
在这里插入图片描述

<body>
	<div id="c_nav" class="c-nav">
		<span class="cloud"></span>
		<ul>
			<li class="current"><a href="#">首页新闻</a></li>
			<li><a href="#">师资力量</a></li>
			<li><a href="#">活动策划</a></li>
			<li><a href="#">企业文化</a></li>
			<li><a href="#">招聘信息</a></li>
			<li><a href="#">公司简介</a></li>
			<li><a href="#">hi</a></li>
			<li><a href="#">hello</a></li>
		</ul>
	</div>
	<script>
		// 获取元素
		var cloud = document.querySelector('.cloud');
		var c_nav = document.querySelector('.c_nav');
		var lis = document.querySelectorAll('li');
		// 给所有的小li绑定事件
		// current作为筋斗云的起始位置
		var current = 0;
		for (var i = 0; i < lis.length; i++) {
			// 鼠标经过当前小li的位置作为目标值
			lis[i].addEventListener('mouseenter', function(){
				animate(cloud, this.offsetLeft);
			});
			// 鼠标离开小li ,回到起始位置
			lis[i].addEventListener('mouseleave', function() {
				animate(cloud, current);
			});
			// 鼠标点击,就把当前位置作为目标值
			lis[i].addEventListener('click', function() {
				current = this.offsetLeft;
			});
		}
 		// 动画函数
		function animate(obj, target, callback) {
			// 如果不断点击,导致动画速度变快,因为开启太多的定时器,解决方案:让元素只有一个定时器执行
			// 先清除以前的定时器,只保留当前的一个定时器执行
			clearInterval(obj.timer);
			// 给不同的元素指定了不同的定时器
			obj.timer /* 不用给timer开辟新的内存空间,而是使用的是obj的一个属行,这样做节省资源,提高性能*/ = setInterval(function() {
				// 步长值写在定时器里面 步长公式:(目标值 - 现在的位置) / 10
				var step = (target - window.pageYOffset) / 10;
				// 小数要取整 才能保证盒子移动到整数目标位置
				step = step > 0 ? Math.ceil(step) : Math.floor(step);
				if (window.pageYOffset == target) {
					// 停止动画,本质是停止定时器
					clearInterval(obj.timer);
					// 回调函数一定写在定时器结束里面
					// if (callback) {
					// 	callback();
					// }
					callback&&callback();
				}
				// 盒子移动距离
				// 把每次加1 这个步长值改为一个慢慢变小的值 
				// obj.style.left = window.pageYOffset + 1 + 'px';
				window.scroll(0, window.pageYOffset + step);
			}, 30);
		}
		
	</script>
</body>

4、移动端轮播图

在这里插入图片描述

目录 -------------------------------------------------------------------------------- 第1章 javascript概述 1 1.1 什么是脚本语言 2 1.2 javascript简介 2 1.3 javascript与java的关系 3 1.4 javascript的基本构成 4 1.4.1 基本数据类型 4 1.4.2 变量 4 1.4.3 常量 5 1.4.4 表达式 6 1.4.5 运算符 6 1.5 javascript的基本语法 10 1.5.1 if条件选择语句 10 1.5.2 switch选择语句 11 1.5.3 do…while语句 12 1.5.4 while循环语句 13 1.5.5 for循环语句 14 1.5.6 break语句与continue语句 15 1.6 javascript的函数调用 16 1.6.1 函数的定义与调用 17 1.6.2 全局变量与局部变量 17 1.6.3 可变参数的函数 17 1.6.4 预定义函数 17 1.7 javascript的对象 19 1.7.1 对象的基本概述 19 1.7.2 对象属性 19 1.7.3 创建对象 20 1.7.4 使用对象 22 1.7.5 其他内部对象 24 1.8 小结 26 第2章 javascript中事件. 窗口和框架的处理 27 2.1 事件处理的基本概念 28 2.2 常用事件及处理 28 2.2.1 浏览器事件 29 2.2.2 鼠标事件 29 2.2.3 文本框事件 30 2.2.4 其他事件 31 2.3 什么是框架 31 2.4 使用框架 32 2.5 小结 32 第3章 链接类特效 33 3.1 按时消失的链接 34 3.2 带滚动提示的链接 36 3.3 动态变换的链接 37 3.4 滚动链接 38 3.5 不断闪动的链接 39 3.6 在按钮上定时显示不同的链接 40 3.7 带链接的滚动字幕 42 3.8 单击链接显示菜单 43 3.9 鼠标右键链接 44 3.10 显示当前页的所有链接 45 3.11 查看网址源代码 46 3.12 将站点加入收藏夹 47 3.13 单击按钮返回默认主页 47 3.14 给指定的人员发信 48 3.15 弹出菜单式链接 49 3.16 图片选择器 50 3.17 链接导航框 51 3.18 小球跟踪链接 52 3.19 单击按钮打开全屏窗口 56 3.20 单选按钮选择链接 56 3.21 隐藏的链接 57 3.22 变换链接颜色 58 3.23 固定链接的位置 59 第4章 时间类特效 61 4.1 时间的水中倒影 62 4.2 简单的日历 63 4.3 带有农历的日历 65 4.4 标题栏显示日期 68 4.5 标题栏显示时间 69 4.6 不同时间的不同问候 69 4.7 记录进入网站的时间 70 4.8 页面的最后更新日期 71 4.9 节日倒计时 72 4.10 定时打开指定页面 72 4.11 显示在背景上的时钟 73 4.12 动态显示访问时间 75 4.13 在指定时间内保存页面 76 4.14 离今天最近的两个星期天 78 4.15 记录在网站停留的时间 79 4.16 带开关的时钟 80 4.17 每天显示一条不同的信息 81 4.18 模拟时钟 82 4.19 英文式的文本时钟 84 4.20 关闭页面时弹出时间警告框 85 4.21 显示在按钮上的时间 86 4.22 计算出生时间 88 4.23 计算几天后将是什么日期 92 第5章 鼠标类特效 95 5.1 让鼠标悬停来开关窗口 96 5.2 鼠标的十字星准星 96 5.3 鼠标的文字跟踪 97 5.4 鼠标经过时改变文本颜色 99 5.5 鼠标驱动图片变化 100 5.6 鼠标悬停时背景色改变 101 5.7 鼠标右键弹出对话框 102 5.8 鼠标的图片旋转跟踪 103 5.9 旋转的鼠标光环 105 5.10 跟随鼠标旋转的文字 107 5.11 单击鼠标右键打开网站 109 5.12 跟着鼠标的烟花 109 5.13 跟随鼠标的时钟 111 5.14 屏蔽鼠标右键 115 5.15 跟随鼠标的滚动字幕 116 5.16 鼠标悬停打开新的页面 117 5.17 鼠标的指针踪迹效果 118 5.18 跟随鼠标跳动的星星 119 5.19 冒水泡的鼠标 121 5.20 跟随鼠标的幻影文字 123 5.21 非图片鼠标跟踪 124 5.22 自动变化的鼠标指针 127 5.23 跟随鼠标的流星 128 第6章 图片类特效 133 6.1 鼠标控制图片的明暗效果 134 6.2 来回摆动的图片 134 6.3 随意飘动的图像 136 6.4 随意走动的图片 137 6.5 图片的水中倒影效果 140 6.6 可以随意拖动的图片 140 6.7 “雷达”扫描图片效果 142 6.8 图片的变形效果 143 6.9 会抖动的图片 144 6.10 不停闪烁的图片 146 6.11 图片分割显示 146 6.12 图片穿行页面效果 148 6.13 自由移动的图片 149 6.14 图片代替按钮效果 150 6.15 图片的翻转效果 151 6.16 向外扩展的图片 152 6.17 鼠标悬停改变图片 153 6.18 图片模糊效果 155 6.19 图片的探照灯效果 156 6.20 跟随屏幕移动的图片 157 6.21 图片的模糊显示 158 6.22 图片的渐隐渐现 159 6.23 一堆开放的花朵 160 第7章 文字类特效 165 7.1 闪烁的按钮文字 166 7.2 逐个显示的变色文字.. 167 7.3 垂直滚动的文字 168 7.4 文字的渐隐渐显的效果 169 7.5 文字跳动的效果 170 7.6 状态栏的打字效果 172 7.7 文字的逐条显示 172 7.8 文字的旋转效果 174 7.9 文字的心跳效果 175 7.10 文字在文本框中坠落 176 7.11 文字飞舞的效果 178 7.12 横向移动的跑马灯 181 7.13 可随便移动的文字 182 7.14 水波形的文字 183 7.15 首字母大小写的变化 184 7.16 状态栏文字飞出效果 186 7.17 链接文字的滚动效果 188 7.18 不停变色的文字 189 7.19 文字颜色变化的显示效果 190 7.20 选中文本框中的全部文字 192 7.21 按钮上的滚动文字 193 7.22 从天而降的文字 194 7.23 鼠标悬停显示提示文字 200 第8章 页面类特效 203 8.1 下雨的页面效果 204 8.2 网页中的loading条 206 8.3 页面的制作完成时间 207 8.4 在状态栏显示输入字符的页面 208 8.5 页面的加密功能 209 8.6 调色板更换页面背景 211 8.7 滚动信息公告页面 213 8.8 页面背景的颜色变化 215 8.9 页面背景的随机显示 216 8.10 单击按钮打印当前页面 217 8.11 记录用户的来访次数 218 8.12 可选择的页面信息 219 8.13 文本框消失的页面 220 8.14 随机播放背景音乐的页面 221 8.15 能自动滚屏的页面 222 8.16 密码保护页面 223 8.17 检测ie所装插件的页面 224 8.18 页面向右滚屏 225 8.19 渐渐消失的页面 226 8.20 按钮锁定页面 226 8.21 在线改变背景颜色 227 8.22 雪花纷飞的页面 228 8.23 页面直接显示 230 第9章 窗口类特效 233 9.1 按指定要求打开的窗口 234 9.2 控制窗口的打开和关闭 235 9.3 从天而降的窗口 235 9.4 打开慢慢变大的窗口 236 9.5 打开一个四面变大的窗口 237 9.6 定时打开新的窗口 238 9.7 转动出现的窗口 239 9.8 自动弹出的窗口 241 9.9 自动消失的广告窗口 242 9.10 窗口的震动效果 243 9.11 同时打开10个窗口 244 9.12 检测系统信息窗口 245 9.13 测试链接速度的窗口 248 9.14 关闭窗口打开收藏夹 250 9.15 关闭窗口打开指定地址 250 9.16 显示载入时间的窗口 251 9.17 显示浏览器信息的窗口 252 9.18 显示访客登录信息的窗口 253 9.19 标题渐变的窗口 255 9.20 绝对全屏打开链接网页 257 9.21 打开一个频道窗口 258 9.22 在页面中打开窗口 258 9.23 自动滚动的窗口 259 第10章 其他特效 261 10.1 显示下载进度 262 10.2 打开或关闭隐藏层 263 10.3 打字速度测试 264 10.4 改变图片提示背景颜色 266 10.5 渐变色表格 269 10.6 列表内容相互转换 270 10.7 身体健康测试 273 10.8 网络知识测试 275 10.9 方框线上的闪耀效果 278 10.10 自动隐藏的菜单 281 10.11 自动收缩的菜单 283 10.12 爆炸式菜单链接 285 10.13 显示边框的菜单 287 10.14 右键菜单链接 289 10.15 首页导航菜单 291 10.16 ftp登录页面 292 10.17 html颜色代码表 293 10.18 计算平面上两点之间的距离 294 10.19 测试点击速度 295 10.20 元素周期表 297 10.21 计算器 299 10.22 自信测试 302 10.23 滚动交换链接 304 第11章 javascript与activex技术 311 11.1 activex组件 312 11.1.1 什么是activex组件 312 11.1.2 activex的内容 312 11.1.3 activex控制和internet 312 11.2 activex组件的应用 313 11.2.1 网页中的flash对象 313 11.2.2 flash对象的调用 314 11.3 asp与activex组件 315 11.4 asp与javascript语言 315 11.4.1 脚本语言 316 11.4.2 设置脚本语言 316 11.4.3 服务器端的脚本 316 11.4.4 javascript和vbscript的区别 317 11.5 asp与表单处理 317 11.5.1 form数据集合 317 11.5.2 form集合的提交方式 318 11.6 小结 319 第12章 javascript中的数据库调用 321 12.1 数据库的构建 322 12.2 数据库查询语句 323 12.2.1 sql数据库 323 12.2.2 asp中的sql语句 323 12.3 数据库的连接 324 12.3.1 odbc的dsn连接方法 324 12.3.2 odbc的直接连接方法 325 12.3.3 ole db的连接方法 325 12.4 数据库的查询 325 12.4.1 使用connection对象查询数据库 326 12.4.2 使用recordset对象查询数据库 327 12.5 使用javascript访问数据库 330 12.6 小结 331 第13章 综合实例 333 13.1 勇闯迷宫 334 13.2 记忆力游戏 338 13.3 贪吃蛇游戏 342 13.4 打蜜蜂 345 13.5 射击游戏 350 13.6 螃蟹赛跑 353 13.7 数字拼图 358 13.8 填格子游戏 363 13.9 棒球动画 367 13.10 礼花动画 372
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值