类360极速浏览器官网html

打算考考研了,所以把之前没写的博客都补一下。赶紧去钻进考研的学习中。

 

效果图 

 

 动画部分代码

动画部分采用替换标签中类的方法,有两个类,init(动画初始化)、done(动画开始)。

当显示该页面时就开始该页面的动画,并且初始化上一个页面的动画。

 var animationElement={
	".box1":[
		".font1",
		".phone1",
		".shadow1"
	],
	".box2":[
		".font21",
		".font22",
		".phone2",
		".left1",
		".right1",
		".right2"
	],
	".box3":[
		".font31",
		".font32",
		".kuai1",
		".phone3"
	],
	".box4":[
		".font41",
		".font42",
		".phone41.one",
		".phone41.two",
		".phone41.three",
		".phone41.four"
	]
}
 var all={};
 //获取各动画元素上的所有类
getAllCls();
 function getAllCls(){
 	for(var i=0;i<4;i++){
 		var n=".box"+(i+1);
 		var a=animationElement[n].length;
 		for(var j=0;j<a;j++){
 			all[animationElement[n][j]]=document.querySelector(animationElement[n][j]).className;
 		}
 	}
 	console.log(all);
 }
 
//给某节点添加动画类  init-->done
function addCls(cls){//cls是需要初始动画的类
	var node=document.querySelector(cls);
	node.className=all[cls].replace("init","done");
	console.log(node.className);
}
//给某节点添加动画类  init<--done
function delCls(cls){//cls是需要初始动画的类
	var node=document.querySelector(cls);
	node.className=all[cls].replace("done","init");
}
//动画开始
function play(idx){//idx为需要播放动画的页,值为.box1,.box2等等
	var animationNodes=animationElement[idx];
	for(var i=0;i<animationNodes.length;i++){
		console.log(animationNodes[i]);
		addCls(animationNodes[i]);
	}
}
//动画开始后初始化
function init(idx){//idx为需要动画初始化的页,值为.box1,.box2等等
	var animationNodes=animationElement[idx];
	for(var i=0;i<animationNodes.length;i++){
		delCls(animationNodes[i]);
	}
}
/*play(".box1");
play(".box2");
play(".box3");*/
play(".box1");

 

轮播部分

基本思想,把每一页放在一个打box里面,通过控制这个box的top,来切换每一页。

本案例可以用鼠标光标和滑轮来切换页面。

也可以通过导航来控制页面,同时导航栏也会根据页面进行相应的变化

var tipNum=0;//nav里面的被选中的项,默认在第一个位置
var colorId;
var navItem=document.querySelectorAll(".navItem");
var t=document.querySelector(".nav-tip");//选中时nav下面的红线
var tipp=function(idx){
	console.log(1);
	navItem[idx].onmouseover=function(){
		t.style.left=idx*72+"px";

	}
	navItem[idx].onmouseout=function(){
		t.style.left=tipNum*72+"px";
	}
	navItem[idx].onclick=function(){
		navItem[tipNum].style.color="#292f35";//给hover加了个!important
		tipNum=idx;
		console.log(tipNum);
		this.style.color="red";
		t.style.left=tipNum*70+"px";
		navControlDom(tipNum+1);
	}
}
for(var i=0;i<navItem.length;i++){
	tipp(i);
}

//nav控制页面
function navControlDom(id){
	console.log('idd:'+idd+'id:'+id);
	if(id==idd){
		return;
	}else{
		init('.box'+idd)
		box.style.top=-(id-1)*clientHeight+'px';
		idd=id;
		play('.box'+idd);
	}
}






//滑轮和光标控制页面
	var box=document.getElementsByClassName('box')[0];
	var clientHeight=document.documentElement.clientHeight;
	var boxNum=box.children.length;
	var isWheel=true;//是否可以用滑轮控制轮播
	var idd=1;//每页的id号,是明线,贯穿全局
	
	//当屏幕窗口改变时触发,解决了在打开控制台的时候刷新页面,去掉控制台后页面大小不会还原的问题
	window.onresize=function(){
		clientHeight=document.documentElement.clientHeight
		for(var i=0;i<boxNum;i++){
			box.children[i].style.height=clientHeight;//同时也要更新这个值
		}
		box.style.top=-(idd-1)*clientHeight+'px';
		box.style.transition='0s'
		console.log(111);
	}
	//给每一页添加高度
	for(var i=0;i<boxNum;i++){
		box.children[i].style.height=clientHeight+'px';
	}
		//滚(划)动
	function toMove(id,moveGap,Gap){//id:页面的id,从1开始;moveGap:距离变量;Gap:要判断的距离值
		console.log('id:'+id+";moveGap:"+moveGap+";Gap:"+Gap);
		if(moveGap>=Gap&&id+1<=boxNum){//向下滑
			box.style.top=-id*clientHeight+'px';
			idd+=1;
			play('.box'+idd);
		}
		else if(moveGap<=-Gap&&id-1>=1){//向c上滑
			box.style.top=-(id-1-1)*clientHeight+'px';
			idd-=1;
			play('.box'+idd);
			
		}else{
			return;
		}
		//页面变化,导航栏也变化
		navItem[id-1].style.color='#292f35';
		navItem[idd-1].style.color='red';
		t.style.left=(idd-1)*70+"px";
		tipNum=idd-1;
		//初始化上一个页面,idd是当前的页面
		init('.box'+id);
		box.style.transition='.5s';
	}
	
	
	cursor();
	//用鼠标光标控制轮播
	function cursor(){
		box.onmousedown=function(event){
			var x=event.x;
			var y=event.y;
			var that=this;
			var ns,ny,isUp=false,move,oldMove=y,totalMove;
			console.log(event)
			this.onmouseup=function(event){
				that.onmousemove=null;
				nx=event.x;
				ny=event.y;
				isUp=true;
				totalMove=y-event.y;
				toMove(idd,totalMove,100);
			}
			this.onmousemove=function(event){
				move=oldMove-event.y;
				oldMove=event.y;
				console.log(move);
				if(move>0&&parseInt(box.style.top)>-(boxNum-1)*clientHeight){//鼠标光标向上划
					box.style.top=parseInt(box.style.top)-move+'px';
				}else if(move<0&&parseInt(box.style.top)<0){//鼠标光标向下划
					box.style.top=parseInt(box.style.top)-move+'px';
				}				
				event.preventDefault();
				console.log(event)
			}
		}
	}
	
	//滑轮控制轮播
	function wheel(){
		function openWheel(){//防止稍微滚一下页面飞多么远
			isWheel=true;
		}
		window.onmousewheel=function(event){//滑轮控制轮播
			if(isWheel==false){//如果为false,直接退出,不在经理下面步骤,包括setTimeout,这个判断写在下面的if中会有setTimeout引起的bug,
				return;
			}
			console.log(idd);
			toMove(idd,event.deltaY,100);
			isWheel=false;
			setTimeout(openWheel,1000);
		}
	}
	wheel();
	

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值