JavaScript-交互效果
返回顶部
效果:
h1{height: 200px;}
.btns{
position: fixed;
right: 100px;
bottom: 50px;
width: 60px;
text-align: center;
cursor: pointer;
display: none;
}
#closebtn{
border: #c2c2c2 solid 1px;
margin: 0;
font: 15px/2em "宋体",Serif;
}
#topbtn{
background: #dddddd;
height: 60px;
font: 24px/60px Arial;
}
多复制几行,需要滚动条!!!
多复制几行,需要滚动条!!!
多复制几行,需要滚动条!!!
多复制几行,需要滚动条!!!
多复制几行,需要滚动条!!!
多复制几行,需要滚动条!!!
多复制几行,需要滚动条!!!
多复制几行,需要滚动条!!!
多复制几行,需要滚动条!!!
多复制几行,需要滚动条!!!
多复制几行,需要滚动条!!!
多复制几行,需要滚动条!!!
多复制几行,需要滚动条!!!
多复制几行,需要滚动条!!!
多复制几行,需要滚动条!!!
多复制几行,需要滚动条!!!
多复制几行,需要滚动条!!!
多复制几行,需要滚动条!!!
多复制几行,需要滚动条!!!
多复制几行,需要滚动条!!!
多复制几行,需要滚动条!!!
多复制几行,需要滚动条!!!
X关闭
//点击top回到顶部
topbtn.onclick=function () {
//利用定时器制作动画效果
var timer=setInterval(function () {
var y=window.scrollY- 50;
//当滚动到顶部就清除定时器
if (y<=0){
clearInterval(timer);
}
window.scroll(0,y);
},50);
}
//点击关闭隐藏
closebtn.onclick=function () {
this.parentNode.style.display="none";
}
//当滚动条滑动到一定程度时显示top按钮
window.onscroll=function () {
if (scrollY>=200){
topbtn.parentNode.style.display="block";
}else {
topbtn.parentNode.style.display="none";
}
}
正则表达式
概念
正则表达式:是一种字符串中查找、替换、拆分、数据匹配的模式。
正则表达式的定义
1.字面量方式(常用):
var reg=/正则表达式规则/修饰符;2.实例化方式:
var reg=new RegExp("正则表达式","修饰符");
3.修饰符:
i 不区分大小写
m 多行匹配,如果在一行找不到就继续找下一行直到结束
g 全局匹配,找到一个继续找下一个
4.正则表达式的使用
1)正则表达式对象方法:
正则表达式.test(字符串) //测试字符串中是否能找到正则表达式匹配结果,返回真或假
正则表达式.exec(字符串) // 匹配出字符串和正则表达式的子字符串
2)字符串对象方法:
字符串.match(正则表达式) //匹配字符串
字符串.replace(正则表达式,""**) // 替换匹配到的字符
字符串.split(正则表达式) //将正则表达式匹配到的字符作为拆分间隔符
案例:
/**
* 正则表达式:是一种字符串中查找、替换、拆分、数据匹配的模式
* 正则表达式的定义:
* 1.字面量方式(常用):
* var reg=/正则表达式规则/修饰符;
*
* 2.实例化方式:
* var reg=new RegExp("正则表达式","修饰符");
*
* 3.修饰符:
* i 不区分大小写
* m 多行匹配,如果在一行找不到就继续找下一行直到结束
* g 全局匹配,找到一个继续找下一个
*
* 4.正则表达式的使用:
* 1)正则表达式对象方法:
* 正则表达式.test(字符串) //测试字符串中是否能找到正则表达式匹配结果,返回真或假
* 正则表达式.exec(字符串) // 匹配出字符串和正则表达式的子字符串
* 2)字符串对象方法:
* 字符串.match(正则表达式) //匹配字符串
* 字符串.replace(正则表达式,""**) // 替换匹配到的字符
* 字符串.split(正则表达式) //将正则表达式匹配到的字符作为拆分间隔符
*/
var str="姓名:张三,年龄:90,电话:13900000000,爱好:打篮球。姓名:李四,电话:15912341234";
//字面量方式
var reg=/[0-9]{11}/g;
console.log(str.match(reg));
//实例化方式
var reg1=new RegExp("[0-9]{11}","g");
//对象方法
console.log(reg.test(str));//test
console.log(reg.exec(str));//exec
console.log(str.match(reg1));//匹配字符串
console.log(str.replace(reg,"***"));//字符串替换
console.log(str.split(reg));//以XX作为间隔拆分
正则表达式的编写
正则表达式的编写:三段式:字符+数量+匹配模式
1.匹配字符
[0-9] 匹配到括号中出现的所有字符(0123456789)
[a-z] 小写字母
[A-Z] 大写字母
[A-z] 不区分大小写
\d 匹配数字,相当于[0-9]
\D 匹配非数字,除数字以外的所有字符
\w 匹配单词字符,相当于[0-9A-z]
\W 匹配非单词字符
\t 匹配table键(缩进符)
\r 匹配回车符
\n 匹配换行符
. 匹配除换行以外的所有字符
^ 字符串开始
$ 字符串结束
2.数量
* 前面匹配的字符出现0次或多次
+ 前面匹配的字符出现1次或多次
{n} 字符出现n次
{n,m} n<=数量<=m
{n,} n次以上
3.匹配模式
贪婪模式:默认
饥饿模式:尽可能匹配少的
案例:
/*
正则表达式的编写:
三段式:字符+数量+匹配模式
1.匹配字符
[0-9] 匹配到括号中出现的所有字符(0123456789)
[a-z] 小写字母
[A-Z] 大写字母
[A-z] 不区分大小写
\d 匹配数字,相当于[0-9]
\D 匹配非数字,除数字以外的所有字符
\w 匹配单词字符,相当于[0-9A-z]
\W 匹配非单词字符
\t 匹配table键(缩进符)
\r 匹配回车符
\n 匹配换行符
. 匹配除换行以外的所有字符
^ 字符串开始
$ 字符串结束
2.数量
* 前面匹配的字符出现0次或多次
+ 前面匹配的字符出现1次或多次
{n} 字符出现n次
{n,m} n<=数量<=m
{n,} n次以上
3.匹配模式
贪婪模式:默认
饥饿模式:尽可能匹配少的
*/
var reg=/\D+/g;
var str="张三:Hello World !!! 123";
console.log(str.match(reg));
注册表单验证
效果:
代码:
span{
font-size: 12px;
margin-left: 10px;
}
.red{color: #f00;}
.green{color: #0a0;}
/**
* 失去焦点时做客户端验证,验证用户名,密码,手机号,验证码是否符合格式要求
* 用户名;2字以上,12字以下
* 手机号11位数字,1开头
* 密码:6个字以上,16个字以下,由字母数字下划线组成
* 验证码6位
*/
//定义一个全局状态对象,用于保存验证状态
var checkstate={username:0,phone:0,pad:0,captcha:0};
//用户名验证
username.onblur=function () {
var reg=/^\w{2,12}$/;//正则表达式
if (reg.test(this.value)){
this.style.border="2px solid #0a0";
usernameinfo.innerHTML="恭喜你,用户名可用!"
usernameinfo.className="green";
checkstate.username=1;//通过用户名验证时,将状态修改为1,表示已通过
}else{
this.style.border="2px solid #f00";
usernameinfo.innerHTML="用户名不合法!"
usernameinfo.className="red";
checkstate.username=0;//未通过验证,将状态修改为0
}
}
//手机号验证
phone.onblur=function () {
var reg=/^1[356789]\d{9}$/;
if (reg.test(this.value)){
this.style.border="2px solid #0a0";
checkstate.phone=1;
}else{
this.style.border="2px solid #f00";
checkstate.phone=0;
}
}
//密码验证
pad.onblur=function () {
var reg=/^[A-z0-9_]{6,16}$/;
if (reg.test(this.value)){
this.style.border="2px solid #0a0";
checkstate.pad=1;
}else{
this.style.border="2px solid #f00";
checkstate.pad=0;
}
}
//验证码
captcha.onblur=function () {
var reg=/^\d{6}$/;
if (reg.test(this.value)){
this.style.border="2px solid #0a0";
checkstate.captcha=1;
}else{
this.style.border="2px solid #f00";
checkstate.captcha=0;
}
}
//提交按钮,再次验证所有表单信息是否合法
myform.onsubmit=function () {
//遍历checkstate状态信息
var flag=true;
for (var i in checkstate){
if (checkstate[i]===0){
var obj = document.getElementById(i);
obj.style.border="2px solid #f00";
// alert("不能提交,有输入未通过验证!");
flag=false;
}
}
return flag;
}
Tab滑动菜单效果
效果:
代码:
.btns a{
background: #dddddd;
padding: 4px 6px;
border-radius: 6px;
text-decoration: none;
color: #333333;
}
.btns>a:hover,.btns a.on{
background: red;
color: #ffffff;
}
.box{padding-top: 10px}
.box>div{
width: 400px;
height: 200px;
display: none;
}
#box1{background: red; display: block;}
#box2{background: #00A7EA;}
#box3{background: #00aa00;}
//选项卡效果:移动到按钮上显示对应的盒子,切换按钮样式
//1.移动到按钮上
var btns = document.querySelectorAll(".btns a");
var box = document.querySelectorAll(".box div");
for (var i=0;i //批量绑定事件 btns[i].onmouseover=function () { //清除所有样式 for (var j=0;j btns[j].className=""; } //给自己加样式 this.className="on"; //隐藏所有盒子 for (var k=0;k box[k].style.display="none"; } //显示当前按钮对应的盒子 box[this.id].style.display="block"; } //绑定事件后,在标签上加属性,保存下标 btns[i].id=i; } 图片轮播动画的制作BannerFocus 效果图: 代码1(简单): .banner{ width: 1000px; height: 400px; margin: 0 auto; position: relative; } #imgs>img{ width: 1000px; height:400px; display: none; } #imgs>img:first-child{ display: block; } #btns{ position: absolute; top: 350px; width: 100%; text-align: center; } #btns>a{ display: inline-block;/*行内块*/ background: #c2c2c2; border-radius: 100%; width: 16px; height:16px; text-indent: -9999px;/*字符缩进,把文字移走隐藏*/ } #btns>a.on{background: red;}
/*
轮播图:
1.移动到某个按钮时,显示对应的图
2.让四个图3秒定时滚动
*/
var a = btns.children;//得到所有的元素
var img=imgs.children;//得到所有图片
//批量绑定事件
for (var i=0;i //为每一个按钮绑定事件 a[i].onmouseover=function () { show(this.innerText); } } var i=1;//从1开始定时切换,刷新页面时就是0 setInterval(function () { show(i%a.length);//通过整除取余让四个图不断切换 i++; },1000); //函数封装 function show(n) { //去除所有按钮的样式on for (var j=0;j a[j].className=""; } //给当前鼠标移动到的位置添加样式on a[n].className="on"; //隐藏所有图 for (var k=0;k img[k].style.display="none"; } //显示当前按钮对应的图 img[n].style.display="block"; } 代码1(难): ul { margin: 0; padding: 0; list-style: none; } .banner { width: 1000px; height: 400px; margin: 0 auto; overflow: hidden; position: relative; } #imgs > li { float: left; } #btns { position: absolute; top: 350px; width: 100%; text-align: center; } #btns > a { display: inline-block; background: #c2c2c2; width: 16px; height: 16px; border-radius: 100%; margin: 0 4px; text-indent: -9999px; } #btns > a.on { background: red; }
var img = imgs.children;
//根据图片的数量自动生成对应的按钮
var html = "
for (var i = 0; i < img.length; i++) {
if (i == 0) {
html += "" + i + "";
} else {
html += "" + i + "";
}
}
html += "
document.querySelector(".banner").innerHTML += html;
//把第一个图片复制一份成为最后一张图
imgs.innerHTML+=imgs.children[0].outerHTML;//把第一个图添加到最后一个位置
imgs.style.width=imgs.children.length*1000+"px";//根据子元素的个数自动设置宽度
//获取所有的按钮
var btn = document.getElementById("btns").children;
var timer1, timer2;
//批量绑定事件
for (var i = 0; i < btn.length; i++) {
btn[i].onmouseover = function () {
show(this.index);
clearInterval(timer2);//移动到按钮上时,应该让自动播放停下来
}
//移开时让其继续播放
btn[i].onmouseout = function () {
scrollIndex = this.index + 1; //移上去时将下标改成当前按钮
autoplay();//函数调用
}
btn[i].index = i;//为每一个按钮设置一个索引,通过与图片建立联系
}
//使用定时器实现自动播放
var scrollIndex = 1;
function autoplay() {
timer2 = setInterval(function () {
show(scrollIndex % btn.length);//利用整除取余实现轮流播放
scrollIndex++;
}, 2000);
}
autoplay();//函数调用
//函数封装,实现滚动
function show(n) {
clearInterval(timer1);//
//清除所有样式
for (var j = 0; j < btn.length; j++) {
btn[j].className = "";
}
btn[n].className = "on";//把当前的设置为on
//根据索引计算出要向左移的像素值
// imgs.style.marginLeft=-(this.index*1000)+"px";
var i = 0;
timer1 = setInterval(function () {
if (i >= 1000) {
clearInterval(timer1);
}
if (n>0){
var start=-(btn[n].index-1);
}else {
var start=-(btn.index-1);
}
imgs.style.marginLeft = (start * 1000 - i) + "px";
i += 50;
}, 20);
}
作业
1. 完成上课演示的三个交互效果
2. 制作一个二级下拉菜单(移到顶级菜单时显示子菜单)
3. 制作一个企业网站,练习HTML和CSS,要做界面交互效果 基础版:只做回到顶部交互 挑战版:完成所有交互效果,如:轮播图、选项卡、回到顶部等



