
一、准备知识
1、DOM中的位置与尺寸
parentNode父节点 |
---|
不要和css混淆,js父节点就是包含它的直接父元素 |
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<div id="warp">warp
<div id="inner1">inner1
<div id="inner2">
inner2
</div>
</div>
</div>
</body>
<script type="text/javascript" charset="utf-8">
window.onload=function(){
var inner2=document.querySelector("#inner2");
console.log("inner2的id为"+inner2.id)
console.log("inner2的父节点id为"+inner2.parentNode.id)
inner2.style.position="absolute"
var warp=document.querySelector("#warp")
warp.style.position="relative"
console.log("开启定位后,inner2的父节点id为"+inner2.parentNode.id+",可以看到和css的区别,如果按css标准,应该是warp")
}
</script>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<ul id="deleteLi">
<li>xy1 <a href="javascript:;">删除</a></li>
<li>xy2 <a href="javascript:;">删除</a></li>
<li>xy3 <a href="javascript:;">删除</a></li>
<li>xy4 <a href="javascript:;">删除</a></li>
<li>xy5 <a href="javascript:;">删除</a></li>
</ul>
</body>
<script type="text/javascript" charset="utf-8">
window.onload=function(){
var all_a=document.querySelectorAll("#deleteLi > li > a");
for(let i=0;i<all_a.length;i++){
all_a[i].onclick=function(){
this.parentNode.style.display="none";
}
}
}
</script>
</html>
offsetParent |
---|
offsetParent是一个非常重要的属性,用来设置偏移量 |
涉及到偏移量的主要是offsetLeft、offsetTop、offsetHeight、offsetWidth这四个属性 |
offsetParent是上面4个属性偏移的依据,offsetParent用来确定自己的父级元素,而其它四个属性参照这个父级元素偏移 |
但是js和css是两个东西,不要混淆,js的offsetParent属性参照的是内边距边界 |
另外只要是html元素,就有offsetLeft和offsetTop属性,并且这两个属性是只读的,不可修改 |
既然只读那么怎么偏移呢?之后会讲 |
offsetParent主要定位依据
一、如果body和html标签的margin和padding被清掉
ie7以上浏览器(5大浏览器都是ie7以上,但是火狐有例外)
本身定位为fixed
offsetParent:null (ie7以上浏览器,不包括火狐)
虽然是null但是offsetTop和offsetLeft依旧会参照body定位
offsetParent:body (火狐浏览器)
本身定位不为fixed
父级没有定位
offsetParent:body
父级有定位
offsetParent:第一个设置定位的父级元素
二、没有被清除,因为大多数的网站都是清掉的,所以不做总结
<!DOCTYPE html>
<html id="html">
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
div{
width: 200px;
height: 200px;
}
#warp{
background-color: #0000FF;
}
#inner1{
background-color: #008000;
position: relative;
}
#inner2{
background-color: #A6E22E;
}
</style>
</head>
<body id="body">
<div id="warp">warp
<div id="inner1">inner1
<div id="inner2">
inner2
</div>
</div>
</div>
</body>
<script type="text/javascript" charset="utf-8">
window.onload=function(){
var warp = document.querySelector("#warp");
var inner1 = document.querySelector("#inner1");
var inner2 = document.querySelector("#inner2");
console.log("================offsetParent===============")
console.log(warp.offsetParent)
console.log(inner1.offsetParent)
console.log(inner2.offsetParent)
console.log("=================offsetTop=============")
console.log("warp===="+warp.offsetTop)
console.log("inner1===="+inner1.offsetTop)
console.log("inner2===="+inner2.offsetTop)
}
</script>
</html>
<!DOCTYPE html>
<html id="html">
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
body{
overflow: scroll;
height: 2000px;
width:2000px;
}
</style>
</head>
<body id="body">
<div id="warp">warp
<div id="inner1">inner1
<div id="inner2">
inner2
</div>
</div>
</div>
</body>
<script type="text/javascript" charset="utf-8">
window.onscroll=function(){
var L = document.documentElement.scrollLeft||document.body.scrollLeft
var T = document.documentElement.scrollTop||document.body.scrollTop
console.log(L,T)
}
</script>
</html>
获取某个元素相对于body的绝对位置和相对与视口的相对位置 |
---|
以下都是针对margin 和 border为0的情况,如果有这些值,需要考虑这些值将其加起来 |
因为js的这几个定位都是针对于padding来计算,不会考虑margin和border |
这个了解即可,因为接下来有个属性完美的帮我们计算相对位置和绝对位置 |
<!DOCTYPE html>
<html id="html">
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
body{
overflow: scroll;
height: 2000px;
width:2000px;
}
</style>
</head>
<body id="body">
<div id="warp">warp
<div id="inner1">inner1
<div id="inner2">
inner2
</div>
</div>
</div>
</body>
<script type="text/javascript" charset="utf-8">
window.onscroll=function(){
var inner2=document.querySelector("#inner2");
var Ab = getAb(inner2)
var Re = getRe(inner2)
console.log("相对于body的绝对定位===",Ab,"相对于视口的相对定位",Re)
function getAb(node){
let x = 0;
let y = 0;
while(node){
x += node.offsetLeft;
y += node.offsetTop;
node = node.offsetParent
}
return {x:x,y:y}
}
function getRe(node){
let x = 0;
let y = 0;
while(node){
x += node.offsetLeft;
y += node.offsetTop;
node = node.offsetParent
}
var L = document.documentElement.scrollLeft||document.body.scrollLeft
var T = document.documentElement.scrollTop||document.body.scrollTop
return {x:x-L,y:y-T}
}
}
</script>
</html>
获取元素大小以及其相对于视口的位置,和绝对位置 |
---|
getBoundingClientRect()函数会帮我们自动考虑margin和border计算出相对位置 |
它会给你返回一系列值 |
width 和 height是元素的border-box,就是盒子整个大小,包括border和margin |
这两个属性有什么用呢?就是如果我们想要右上角和左下角的时候可以通过加减width和height这两个值来获取 |
left和top是元素左上角相对于视口左上角的位置 |
right和bottom是元素右下角相对于视口左上角的位置 |
<!DOCTYPE html>
<html id="html">
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
body{
overflow: scroll;
height: 2000px;
width:2000px;
}
</style>
</head>
<body id="body">
<div id="warp">warp
<div id="inner1">inner1
<div id="inner2">
inner2
</div>
</div>
</div>
</body>
<script type="text/javascript" charset="utf-8">
window.onscroll=function(){
var inner2 = document.querySelector("#inner2")
var Re = inner2.getBoundingClientRect();
console.log("相对位置为:",Re)
var L = document.documentElement.scrollLeft||document.body.scrollLeft
var T = document.documentElement.scrollTop||document.body.scrollTop
console.log("绝对位置为",Re.top+T,Re.left+L)
}
</script>
</html>
clientWidth,clientHeight和offsetWidth,offsetHeight的区别 |
---|
<!DOCTYPE html>
<html id="html">
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
#warp{
width: 200px;
height: 200px;
padding: 50px;
border: #000000 solid 20px;
margin: 100px;
}
</style>
</head>
<body id="body">
<div id="warp"></div>
</body>
<script type="text/javascript" charset="utf-8">
window.onload=function(){
var warp = document.querySelector("#warp")
console.log("获取元素可视区域的宽度 就是内边距+元素width",warp.clientWidth)
console.log("获取元素可视区域+边框的宽度",warp.offsetWidth)
}
</script>
</html>
获取视口大小 |
---|
有两个专门获取视口大小的属性,具体看代码 |
<!DOCTYPE html>
<html id="html">
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
#warp{
width: 200px;
height: 200px;
padding: 50px;
border: #000000 solid 20px;
margin: 100px;
}
</style>
</head>
<body id="body">
<div id="warp"></div>
</body>
<script type="text/javascript" charset="utf-8">
window.onload=function(){
var w = document.documentElement.clientWidth
var h = document.documentElement.clientHeight
console.log(w,h)
}
</script>
</html>
2、mac停靠栏


<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
*{
padding: 0;
margin: 0;
}
html,body{
height: 100%;
overflow: hidden;
}
#warp > img{
width: 65px;
}
#warp{
position: absolute;
bottom: 0;
left: 0;
width: 100%;
text-align: center;
}
</style>
</head>
<body>
<div id="warp">
<img src="image/1.png" >
<img src="image/2.png" >
<img src="image/3.png" >
<img src="image/4.png" >
<img src="image/5.png" >
</div>
</body>
<script type="text/javascript" charset="utf-8">
window.onload=function(){
let r = 128;
let img_all = document.querySelectorAll("#warp > img");
document.onmousemove=function(ev){
ev = ev||event;
for(let i = 0;i < img_all.length;i++){
let x = img_all[i].getBoundingClientRect().left + img_all[i].offsetWidth/2 - ev.clientX;
let y = img_all[i].getBoundingClientRect().top + img_all[i].offsetHeight/2 - ev.clientY;
let c = Math.sqrt(x*x,y*y);
if(x > 300 || y > 300){
c=r
}
if(c>=r){
c=r;
}
img_all[i].style.width=(130-c*0.5)+"px";
}
}
}
</script>
</html>
3、鼠标滚轮事件
ie/chrome用: onmousewheel(dom0)
获取向上滑还是向下滑的数值:event.wheelDelta
上:120
下: -120
firefox用: DOMMouseScro11 (必须用dom2的标准模式)
event.detaf
上: -3
下: 3
if(e.preventDefault){
e.preventDefault();
}
return false;
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
*{
padding: 0;
margin: 0;
}
html,body{
height: 2000px;
overflow: scroll;
}
#warp{
width: 100%;
height: 200px;
background-color: #000000;
}
</style>
</head>
<body>
<div id="warp">
</div>
</body>
<script type="text/javascript" charset="utf-8">
window.onload=function(){
let warp = document.querySelector("#warp");
if(warp.addEventListener){
warp.addEventListener("DOMMouseScroll",function(ev){
ev=ev||event
console.log("火狐浏览器 正在滚")
console.log("滚轮滚动方向,下滑为正值,上滑为负值",ev.detail)
if(ev.detail>0){
warp.style.height=warp.offsetHeight+10+"px";
}else{
warp.style.height=warp.offsetHeight-10+"px";
}
})
}
warp.onmousewheel=function(ev){
ev=ev||event
console.log("非火狐浏览器 正在滚")
console.log("滚轮滚动方向,下滑为负值,上滑为正值",ev.wheelDelta)
if(ev.wheelDelta>0){
console.log(warp.offsetHeight)
warp.style.height=(warp.offsetHeight - 10)+"px";
}else{
warp.style.height=warp.offsetHeight+10+"px";
}
if(ev.preventDefault){
ev.preventDefault()
}
return false;
}
}
</script>
</html>
4、曲线运动
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
*{
margin: 0;
padding: 0;
}
#test{
position: absolute;
left: 200px;
top: 300px;
width: 10px;
height: 10px;
background: black;
}
.box{
position: absolute;
border: 1px solid;
}
</style>
</head>
<body>
<div id="test"></div>
</body>
<script type="text/javascript">
window.onload=function(){
var testNode = document.querySelector("#test");
var startX = testNode.offsetLeft;
var startY = testNode.offsetTop;
var deg =0;
var step = 100;
setInterval(function(){
deg++;
testNode.style.left = startX + (deg*Math.PI/180)*step/2 +'px';
testNode.style.top = startY + Math.sin( deg*Math.PI/180 )*step*2+"px";
var boxNode = document.createElement("div");
boxNode.classList.add("box");
boxNode.style.left=testNode.offsetLeft+"px";
boxNode.style.top=testNode.offsetTop+"px";
document.body.appendChild(boxNode);
},1000/60)
}
</script>
</html>
5、气泡效果

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
*{
margin: 0;
padding: 0;
}
html,body{
overflow: hidden;
height: 100%;
}
body{
background-color: pink;
}
canvas{
position: absolute;
left: 0;
top: 0;
right: 0;
bottom: 0;
margin: auto;
background-color: white;
}
</style>
</head>
<body>
<canvas height="600" width="600"></canvas>
</body>
<script type="text/javascript">
window.onload=function(){
let oc = document.querySelector("canvas")
if(oc.getContext){
let ctx = oc.getContext("2d")
let arr = [];
setInterval(function(){
let x = Math.random()*oc.width;
let y = Math.random()*oc.height;
let r = 10;
let red = Math.round(Math.random()*255)
let green = Math.round(Math.random()*255)
let blue = Math.round(Math.random()*255)
let alp = 1;
arr.push({
x:x,
y:y,
r:r,
red:red,
green:green,
blue:blue,
alp:alp
})
},300)
setInterval(function(){
ctx.clearRect(0,0,oc.width,oc.height)
for(let i = 0;i<arr.length;i++){
a=arr[i]
a.r++
a.alp -= 0.01
if(a.alp === 0){
arr.splice(i,1);
}
}
for(let i = 0;i<arr.length;i++){
let a=arr[i];
ctx.save();
ctx.beginPath();
ctx.arc(a.x,a.y,a.r,0,2*Math.PI)
ctx.fillStyle="rgba("+a.red+","+a.green+","+a.blue+","+a.alp+")"
ctx.fill();
}
},7)
}
}
</script>
</html>
6、曲线运动的气泡效果

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
*{
margin: 0;
padding: 0;
}
html,body{
overflow: hidden;
height: 100%;
}
body{
background-color: pink;
}
canvas{
position: absolute;
left: 0;
top: 0;
right: 0;
bottom: 0;
margin: auto;
background-color: white;
}
</style>
</head>
<body>
<canvas height="600" width="270"></canvas>
</body>
<script type="text/javascript">
window.onload=function(){
let oc = document.querySelector("canvas")
if(oc.getContext){
let ctx = oc.getContext("2d")
let arr = [];
setInterval(function(){
let r = Math.random()*7+2;
let x = Math.random()*oc.width;
let y = oc.height-r;
let red = Math.round(Math.random()*255)
let green = Math.round(Math.random()*255)
let blue = Math.round(Math.random()*255)
let alp = 1;
let deg=0;
let startX=x;
let startY=y;
let step = Math.random()*25+15;
arr.push({
x:x,
y:y,
r:r,
red:red,
green:green,
blue:blue,
alp:alp,
deg:deg,
startX:startX,
startY:startY,
step:step
})
},150)
setInterval(function(){
ctx.clearRect(0,0,oc.width,oc.height)
for(let i = 0;i<arr.length;i++){
a=arr[i]
a.deg+=5;
a.x = a.startX + Math.sin(a.deg*Math.PI/180)*a.step*2;
a.y = a.startY - (a.deg*Math.PI/180)*a.step;
if(a.y<=200){
arr.splice(i,1)
}
}
for(let i = 0;i<arr.length;i++){
let a=arr[i];
ctx.save();
ctx.beginPath();
ctx.arc(a.x,a.y,a.r,0,2*Math.PI)
ctx.fillStyle="rgba("+a.red+","+a.green+","+a.blue+","+a.alp+")"
ctx.fill();
}
},9)
}
}
</script>
</html>
二、实战

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
html,body,h1,h2,h3,h4,h5,h6,p,ul,li{
margin: 0;
padding: 0;
font: 0.875rem "微软雅黑";
}
html,body{
overflow: hidden;
height: 100%;
}
a{
text-decoration: none;
display: block;
}
li{
list-style: none;
}
img{
display: block;
}
.commonTitle{
color: #009ee0;
font-size: 80px;
line-height: 0.8;
font-weight: bold;
letter-spacing: -5px;
}
.commonText{
color: white;
line-height: 1.5;
font-size: 15px;
}
.clearfix{
*zoom: 1;
}
.clearfix:after{
content:"";
display: block;
clear: both;
}
#header{
background-color: white !important;
}
#header .header_main{
width: 1100px;
height: 80px;
margin: 0 auto;
position: relative;
}
#header .header_main > .logo{
float: left;
margin-top: 30px;
}
#header .header_main > nav{
float: right;
margin-top: 50px;
}
#header .header_main > nav > .list > li{
float: left;
margin-left: 40px;
position: relative;
}
#header .header_main > nav > .list > li .up{
color: #000000;
position: absolute;
width: 0;
overflow: hidden;
transition: 1s width;
}
#header .header_main > nav > .list > li:hover .up{
width:100%;
}
#header .header_main > .arrow{
width: 21px;
height: 11px;
background-image:url(img/menuIndicator.png) ;
position: absolute;
z-index: 2;
left: 50%;
bottom: -11px;
transition: 1s;
}
#content{background-color: white !important;position: relative; overflow:hidden;widht:100%;}
#content > .list{position: absolute;width: 100%;transition: 1s top;}
#content > .list > li{position: relative;background-position: 50% 50% !important;}
#content > .list > li > section{width: 1100px;height:520px;margin: auto;position: absolute;top: 0;left: 0;right: 0;bottom: 0;}
#content > .list > .home{background: url(img/bg1.jpg) no-repeat;}
#content > .list > .home .home_list_item{width: 100%;height: 100%;perspective: 1000px;transform-style: preserve-3d;}
#content > .list > .home .home_list_item > li{width: 100%;height: 100%;position: absolute;left: 0;top: 0;bottom: 0;right: 0;
visibility: hidden;}
#content > .list > .home .home_list_item > li:nth-child(1){background: #dc6c5f;}
#content > .list > .home .home_list_item > li:nth-child(2){background: #95dc84;}
#content > .list > .home .home_list_item > li:nth-child(3){background: #64b9d2;}
#content > .list > .home .home_list_item > li:nth-child(4){background: #000000;}
#content > .list > .home .home_list_item > li.active{visibility: visible;}
#content > .list > .home .home_list_item > li > div{color: white;text-align: center;margin-top:200px;}
#content > .list > .home .home_list_selector{position: absolute;left: 0;right: 0;bottom:0;text-align: center;}
#content > .list > .home .home_list_selector > li{cursor: pointer;border-radius: 50%;width: 20px;height: 20px;display: inline-block;background-color:rgba(255,255,255,0.5);box-shadow: 5px 5px 15px rgba(0,0,0,0.5);}
#content > .list > .home .home_list_selector > li.active{background-color: white;cursor: default;}
.leftHidden{visibility: hidden;animation: leftHidden 0.7s 1 linear;}
.rightShow{visibility: visible;animation: rightShow .7s 1 linear;}
@keyframes leftHidden{
0%{visibility: visible;}
50%{transform: translateX(-40%) rotateY(30deg) scale(.8);}
100%{transform: translateZ(-200px);}
}
@keyframes rightShow{
0%{visibility: hidden;transform: translateZ(-200px);}
50%{transform: translateX(40%) rotateY(-30deg) scale(.8);}
100%{visibility:visible;}
}
.leftShow{visibility: hidden;animation: leftShow 0.7s 1 linear;}
.rightHidden{visibility: visible;animation: rightHidden .7s 1 linear;}
@keyframes leftShow{
0%{visibility: hidden;transform: translateZ(-200px);}
50%{transform: translateX(-40%) rotateY(30deg) scale(.8);}
100%{visibility: visible}
}
@keyframes rightHidden{
0%{visibility:visible;}
50%{transform: translateX(40%) rotateY(-30deg) scale(.8);}
100%{visibility: hidden;transform: translateZ(-200px);}
}
#content > .list > .course{background: url(img/bg2.jpg) no-repeat;position: relative;}
#content > .list > .course .course_header{margin: 50px}
#content > .list > .course .course_text{margin-left: 50px;width: 400px;}
#content > .list > .course .course_photo_wall{width: 480px;position: absolute;top: 70px;right: 50px;}
#content > .list > .course .course_photo_wall .item{width: 120px;height: 132px;float: left;position:
relative;perspective: 500px;
transform-style: preserve-3d;}
#content > .list > .course .course_photo_wall .line{position: absolute;top:-7px;width: 9px;height: 410px;background: url(img/plus_row.png) no-repeat;}
#content > .list > .course .course_photo_wall .line:nth-of-type(1){left: -5px;}
#content > .list > .course .course_photo_wall .line:nth-of-type(2){left: 115px;}
#content > .list > .course .course_photo_wall .line:nth-of-type(3){left: 235px;}
#content > .list > .course .course_photo_wall .line:nth-of-type(4){left: 355px;}
#content > .list > .course .course_photo_wall .line:nth-of-type(5){left: 475px;}
#content > .list > .course .course_photo_wall .item > div{position: absolute;left: 0;top: 0;bottom: 0;right: 0;box-sizing: border-box;padding: 15px;transition: 1s transform;}
#content > .list > .course .course_photo_wall .item:nth-of-type(1) > .backFace{background: url(img/binoli.png) no-repeat;}
#content > .list > .course .course_photo_wall .item:nth-of-type(2) > .backFace{background: url(img/bks.png) no-repeat;}
#content > .list > .course .course_photo_wall .item:nth-of-type(3) > .backFace{background: url(img/gu.png) no-repeat;}
#content > .list > .course .course_photo_wall .item:nth-of-type(4) > .backFace{background: url(img/hlx.png) no-repeat;}
#content > .list > .course .course_photo_wall .item:nth-of-type(5) > .backFace{background: url(img/lbs.png) no-repeat;}
#content > .list > .course .course_photo_wall .item:nth-of-type(6) > .backFace{background: url(img/leonberg.png) no-repeat;}
#content > .list > .course .course_photo_wall .item:nth-of-type(7) > .backFace{background: url(img/pcwelt.png) no-repeat;}
#content > .list > .course .course_photo_wall .item:nth-of-type(8) > .backFace{background: url(./img/tata.png) no-repeat;}
#content > .list > .course .course_photo_wall .item:nth-of-type(9) > .backFace{background: url(img/binoli.png) no-repeat;}
#content > .list > .course .course_photo_wall .item:nth-of-type(10) > .backFace{background: url(img/gu.png) no-repeat;}
#content > .list > .course .course_photo_wall .item:nth-of-type(11) > .backFace{background: url(./img/tata.png) no-repeat;}
#content > .list > .course .course_photo_wall .item:nth-of-type(12) > .backFace{background: url(img/pcwelt.png) no-repeat;}
#content > .list > .course .course_photo_wall .item > .face{background-color: #009ee0;color: white;
transform: rotateY(180deg);
backface-visibility: hidden;
}
#content > .list > .course .course_photo_wall .item:hover > .face{transform: rotateY(360deg);}
#content > .list > .course .course_photo_wall .item > .backFace{background-position: 50% 50% !important;}
#content > .list > .course .course_photo_wall .item:hover > .backFace{transform: rotateY(180deg);}
#content > .list > .works{background: url(img/bg3.jpg) no-repeat;}
#content > .list > .works .works_header{margin: 50px 0px 100px 50px;}
#content > .list > .works .works_list{margin-left: 50px;}
#content > .list > .works .works_list > .list_item{float: left;width: 220px;height: 133px;margin:0px 4px;position: relative;overflow: hidden;}
#content > .list > .works .works_list > .list_item:last-child{width: 332px;}
#content > .list > .works .works_list > .list_item > .mask{position: absolute;left: 0;right: 0;top: 0;bottom: 0;
box-sizing: border-box;padding: 10px;
color:white;background-color: #000000; opacity: 0;transition: 0.5s opacity;
}
#content > .list > .works .works_list > .list_item > img{transition: 0.5s transform;}
#content > .list > .works .works_list > .list_item:hover > img{transform: rotate(20deg) scale(1.5);}
#content > .list > .works .works_list > .list_item:hover > .mask{opacity:0.6;}
#content > .list > .works .works_list > .list_item > .mask > .icon{width: 32px;height: 34px;margin: 0 auto;margin-top: 10px;
background: url(img/zoomico.png) no-repeat;transition: 0.5s background-position;}
#content > .list > .works .works_list > .list_item > .mask > .icon:hover{background-position:0px -35px;}
#content > .list > .works .robot{width: 167px;height: 191px;background: url(img/robot.png) no-repeat;position: absolute;left:900px;top: 170px;
animation: robotMove 3s linear infinite;
}
@keyframes robotMove{
49%{
transform: translateX(-300px) rotateY(0deg);
}
50%{
transform: translateX(-300px) rotateY(180deg);
}
99%{
transform: translateX(0px) rotateY(180deg);
}
100%{
transform: translateX(0px) rotateY(0deg);
}
}
#content > .list > .about{background: url(img/bg4.jpg) no-repeat;position: relative;}
#content > .list > .about .about_header{margin: 50px 0px 100px 50px;}
#content > .list > .about .about_text{margin-left: 50px;width: 400px;}
#content > .list > .about .about_line{width: 357px;height: 998px;position: absolute;left: 50%;top: -100px;
background:url(img/greenLine.png) no-repeat;}
#content > .list > .about .about_photo > .item{width: 260px;height: 200px;border: rgba(0,0,0,0.5) 5px solid;border-radius: 8px;
position: absolute;z-index: 2;overflow: hidden;}
#content > .list > .about .about_photo > .item:nth-child(1){left: 750px;top: 50px;}
#content > .list > .about .about_photo > .item:nth-child(2){left: 600px;top: 290px;}
#content > .list > .about .about_photo > .item > span,#content > .list > .about .about_photo > .item > ul{
position: absolute;left: 0;top: 0;bottom: 0;right: 0;}
#content > .list > .about .about_photo > .item > ul > li{float: left;position: relative;
overflow: hidden;}
#content > .list > .about .about_photo > .item > ul > li > img{float: left;position: absolute;transition: 1s left,1s top;}
#content > .list > .about .about_photo > .item:nth-child(1) > span{background: url(img/about2.jpg) no-repeat;transform: scale(2);transition: 1s transform;}
#content > .list > .about .about_photo > .item:nth-child(2) > span{background: url(img/about4.jpg) no-repeat;transform: scale(2);transition: 1s transform;}
#content > .list > .about .about_photo > .item:hover > span{transform: scale(1);}
#content > .list > .team{background: url(img/bg5.jpg) no-repeat;position: relative;}
#content > .list > .team .team_header,#content > .list > .team .team_text{width: 400px;margin: 50px;float: left;}
#content > .list > .team .team_text{float: right !important;}
#content > .list > .team .team_people{width: 944px;height: 448px;position: absolute;
bottom: 0;left: 0;right: 0;top: 550px;margin: auto;}
#content > .list > .team .team_people > li{width: 118px;height: 100%;background: url(img/team.png) no-repeat;float: left;
transition: 1s opacity;}
#content > .list > .team .team_people > li:nth-child(1){background-position: 0,0;}
#content > .list > .team .team_people > li:nth-child(2){background-position: -118px,0;}
#content > .list > .team .team_people > li:nth-child(3){background-position: -236px,0;}
#content > .list > .team .team_people > li:nth-child(4){background-position: -354px,0;}
#content > .list > .team .team_people > li:nth-child(5){background-position: -472px,0;}
#content > .list > .team .team_people > li:nth-child(6){background-position: -590px,0;}
#content > .list > .team .team_people > li:nth-child(7){background-position: -708px,0;}
#content > .list > .team .team_people > li:nth-child(8){background-position: -826px,0;}
#content > .dot{position: fixed;right: 5px;top: 50%;}
#content > .dot > li{width: 20px;height: 20px;
background-color: rgba(255,255,255,0.5);box-shadow: 5px 5px 15px rgba(0,0,0,0.5);
margin-top: 10px;border-radius: 50%;cursor: pointer;}
#content > .dot > li.active{background-color: white;cursor: default;}
</style>
</head>
<body>
<section id="warp">
<header id="header">
<div class="header_main">
<h1 class="logo">
<a href="javascript:;">
<img src="img/logo.png" >
</a>
</h1>
<nav>
<ul class="list clearfix">
<li>
<a href="javascript:;">
<div class="up"><img src="./img/home_gruen.png" ></div>
<div class="dpwn"><img src="img/home.png" ></div>
</a>
</li>
<li>
<a href="javascript:;">
<div class="up">Course</div>
<div class="dpwn">Course</div>
</a>
</li>
<li>
<a href="javascript:;">
<div class="up">Works</div>
<div class="dpwn">Works</div>
</a>
</li>
<li>
<a href="javascript:;">
<div class="up">About</div>
<div class="dpwn">About</div>
</a>
</li>
<li>
<a href="javascript:;">
<div class="up">Team</div>
<div class="dpwn">Team</div>
</a>
</li>
</ul>
</nav>
<div class="arrow"></div>
</div>
</header>
<section id="content">
<ul class="list">
<li class="home">
<section>
<ul class="home_list_item commonTitle">
<li class="active">
<div class="item commonTitle">one layer</div>
</li>
<li>
<div class="item commonTitle">two layer</div>
</li>
<li>
<div class="item commonTitle">three layer</div>
</li>
<li>
<div class="item commonTitle">four layer</div>
</li>
</ul>
<ul class="home_list_selector">
<li class="active"></li>
<li></li>
<li></li>
<li></li>
</ul>
</section>
</li>
<li class="course">
<section>
<header class="course_header commonTitle">
<span>EINIGE</span><br>
<span>UNSERER</span><br>
<span>KUNDEN</span><br>
</header>
<div class="course_text">
<p class="commonText">
Das Kundenvertrauen in unsere Kompetenz ist die notwendige Basis einer erfolgreichen Zusammenarbeitgleichzeitig aber auch das groBte Lob, das man unsentgegenbringen kann.
<br/>
Diese und viele weitere groBe und kleine Kunden vertrauen uns seit Jahren, was uns stolz macht, unddafur sagen wir an dieser Stelle einfach mal.
</p>
</div>
<div class="course_photo_wall clearfix">
<span class="line"></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"></span>
<div class="item">
<div class="backFace"></div>
<div class="face">测试文字</div>
</div>
<div class="item">
<div class="backFace"></div>
<div class="face">测试文字</div>
</div>
<div class="item">
<div class="backFace"></div>
<div class="face">测试文字</div>
</div>
<div class="item">
<div class="backFace"></div>
<div class="face">测试文字</div>
</div>
<div class="item">
<div class="backFace"></div>
<div class="face">测试文字</div>
</div>
<div class="item">
<div class="backFace"></div>
<div class="face">测试文字</div>
</div>
<div class="item">
<div class="backFace"></div>
<div class="face">测试文字</div>
</div>
<div class="item">
<div class="backFace"></div>
<div class="face">测试文字</div>
</div>
<div class="item">
<div class="backFace"></div>
<div class="face">测试文字</div>
</div>
<div class="item">
<div class="backFace"></div>
<div class="face">测试文字</div>
</div>
<div class="item">
<div class="backFace"></div>
<div class="face">测试文字</div>
</div>
<div class="item">
<div class="backFace"></div>
<div class="face">测试文字</div>
</div>
</div>
</section>
</li>
<li class="works">
<section>
<header class="works_header commonTitle">
<span>ENIBLICK</span><br>
<span>ERKENNTNIS</span><br>
<span>ERGEBNIS</span><br>
</header>
<div class="works_list clearfix">
<div class="list_item">
<img src="img/worksimg1.jpg" />
<div class="mask">
<span>测试文字</span>
<div class="icon"></div>
</div>
</div>
<div class="list_item">
<img src="img/worksimg2.jpg" />
<div class="mask">
<span>测试文字</span>
<div class="icon"></div>
</div>
</div>
<div class="list_item">
<img src="img/worksimg3.jpg" />
<div class="mask">
<span>测试文字</span>
<div class="icon"></div>
</div>
</div>
<div class="list_item">
<img src="img/worksimg4.jpg" />
<div class="mask">
<span>测试文字</span>
<div class="icon"></div>
</div>
</div>
</div>
<div class="robot">
</div>
</section>
</li>
<li class="about">
<section>
<header class="about_header commonTitle">
<span>DIE</span><br>
<span>SPEZIELLE</span><br>
<span>VIELFALT</span><br>
</header>
<div class="about_text commonText">
<p>
Das Kundenvertrauen in unsere Kompetenz ist die notwendige Basis einer erfolgreichen Zusammenarbeitgleichzeitig aber auch das groBte Lob, das man unsentgegenbringen kann.
<br>
Diese und viele weitere groBe und kleine Kunden vertrauen uns seit Jahren, was uns stolz macht, unddafur sagen wir an dieser Stelle einfach mal.
</p>
</div>
<div class="about_photo">
<div class="item">
<span></span>
<ul data-src="img/about1.jpg"></ul>
</div>
<div class="item">
<span></span>
<ul data-src="img/about3.jpg"></ul>
</div>
</div>
<div class="about_line"></div>
</section>
</li>
<li class="team">
<section>
<header class="team_header commonTitle">
<span>WIR SIND</span><br>
<span>VOXELAIR</span><br>
</header>
<div class="team_text commonText">
<p>
Das Kundenvertrauen in unsere Kompetenz ist die notwendige Basis einer erfolgreichen Zusammenarbeitgleichzeitig aber auch das groBte Lob, das man unsentgegenbringen kann.
<br>
Diese und viele weitere groBe und kleine Kunden vertrauen uns seit Jahren, was uns stolz macht, unddafur sagen wir an dieser Stelle einfach mal.
</p>
</div>
<ul class="team_people">
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
</ul>
</section>
</li>
</ul>
<ul class="dot">
<li class="active"></li>
<li></li>
<li></li>
<li></li>
<li></li>
</ul>
</section>
</section>
</body>
<script type="text/javascript">
window.onload=function(){
function getDOM(query){
return document.querySelector(query)
}
function getDOMAll(query){
return document.querySelectorAll(query)
}
let header_arrow = getDOM("#header .header_main > .arrow")
let header_li_all= getDOMAll("#header .header_main > nav > .list > li")
let header_li_up_all= getDOMAll("#header .header_main > nav > .list > li .up")
header_arrow.style.left=header_li_all[0].offsetLeft + header_li_all[0].offsetWidth/2 - header_arrow.offsetWidth/2 +"px";
header_li_up_all[0].style.width="100%";
let header = getDOM("#header")
let content = getDOM("#content")
let content_li_all = getDOMAll("#content > .list > li")
let content_list = getDOM("#content .list")
let dot_li_all = getDOMAll("#content > .dot > li");
contentBind();
function contentBind(){
content.style.height=document.documentElement.clientHeight - header.offsetHeight + "px";
for(let i = 0;i < content_li_all.length;i++){
content_li_all[i].style.height=document.documentElement.clientHeight - header.offsetHeight + "px";
}
}
let flag=0;
for(let i = 0;i < header_li_all.length;i++){
header_li_all[i].onclick=function(){
flag=i;
move(flag);
}
}
dot();
function dot(){
for(let i = 0;i < dot_li_all.length;i++){
let index=i;
dot_li_all[i].onclick=function(){
for(let j = 0;j < dot_li_all.length;j++){
dot_li_all[j].classList.remove("active")
}
this.classList.add("active");
move(i)
}
}
}
function changeDot(){
for(let j = 0;j < dot_li_all.length;j++){
dot_li_all[j].classList.remove("active")
}
dot_li_all[flag].classList.add("active")
}
function move(i){
for(let i = 0;i < header_li_all.length;i++){
header_li_up_all[i].style.width="";
}
header_arrow.style.left=header_li_all[i].offsetLeft + header_li_all[i].offsetWidth/2 - header_arrow.offsetWidth/2 +"px";
header_li_up_all[i].style.width=100+"%";
content_list.style.top=-i*(document.documentElement.clientHeight - header.offsetHeight)+"px";
flag = i;
changeDot();
}
window.onresize=function(){
contentBind();
content_list.style.top=-flag*(document.documentElement.clientHeight - header.offsetHeight)+"px";
header_arrow.style.left=header_li_all[flag].offsetLeft + header_li_all[flag].offsetWidth/2 - header_arrow.offsetWidth/2 +"px";
}
let timer=0;
if(content.addEventListener){
content.addEventListener("DOMMouseScroll",scrollFn);
}
content.onmousewheel=scrollFn;
function scrollFn(ev){
ev= ev||event;
if(ev.wheelDelta){
if(ev.wheelDelta>0){
scrollMoveFn(false);
}else{
scrollMoveFn(true)
}
}else{
if(ev.detail>0){
scrollMoveFn(true);
}else{
scrollMoveFn(false)
}
}
}
function scrollMoveFn(b){
clearTimeout(timer)
timer = setTimeout(function(){
move(flagFn(b))
},150)
}
function flagFn(b){
if(b){
return flag===4?flag=4:++flag;
}else{
return flag===0?flag=0:--flag;
}
}
let home_list_item_all = getDOMAll("#content > .list > .home .home_list_item > li")
let home_list_selector_all = getDOMAll("#content > .list > .home .home_list_selector > li")
let bannerArea = getDOM("#content > .list > .home section")
let oldIndex = 0;
let autoIndex = 0;
let autoBanner_timer = 0;
home3d();
function home3d(){
for(let i = 0;i<home_list_selector_all.length;i++){
home_list_selector_all[i].index=i;
home_list_selector_all[i].onclick=function(){
for(let j = 0;j<home_list_selector_all.length;j++){
if(this.index != oldIndex){
home_list_selector_all[j].classList.remove("active");
home_list_item_all[j].classList.remove("active","rightShow","leftShow","leftHidden","rightHidden")
}
}
this.classList.add("active");
if(this.index > oldIndex){
home_list_item_all[i].classList.add("rightShow","active")
home_list_item_all[oldIndex].classList.add("leftHidden")
}else if(this.index < oldIndex){
home_list_item_all[i].classList.add("rightHidden")
home_list_item_all[oldIndex].classList.add("leftShow","active")
}
oldIndex=this.index;
autoIndex=this.index;
}
}
autoBanner();
function autoBanner(){
autoBanner_timer=setInterval(function(){
for(let j = 0;j<home_list_selector_all.length;j++){
home_list_selector_all[j].classList.remove("active");
home_list_item_all[j].classList.remove("active","rightShow","leftShow","leftHidden","rightHidden")
}
if(autoIndex===home_list_item_all.length-1){
home_list_item_all[0].classList.add("rightShow","active")
home_list_selector_all[0].classList.add("active");
home_list_item_all[autoIndex].classList.add("leftHidden")
autoIndex=0;
}else{
home_list_item_all[autoIndex+1].classList.add("rightShow","active")
home_list_selector_all[autoIndex+1].classList.add("active");
home_list_item_all[autoIndex++].classList.add("leftHidden")
}
oldIndex=autoIndex;
},2000);
}
bannerArea.onmouseenter=function(){
clearInterval(autoBanner_timer);
}
bannerArea.onmouseleave=function(){
autoBanner();
}
}
let about_photo_ul_all =getDOMAll("#content > .list > .about .about_photo > .item > ul");
picBoom()
function picBoom(){
for(let i = 0;i < about_photo_ul_all.length;i++){
change(about_photo_ul_all[i]);
}
function change(ul){
let url = ul.dataset.src;
let width = ul.offsetWidth/2;
let height = ul.offsetHeight/2;
for(let i =0;i<4;i++){
ul.index = i;
let li = document.createElement("li");
li.style.width = width + "px";
li.style.height = height + "px";
let img = document.createElement("img");
img.src = url;
img.style.left = -(i % 2) * width+ "px";
img.style.top = -Math.floor(i / 2) * height + "px";
li.appendChild(img)
ul.appendChild(li)
}
ul.onmouseenter=function(){
let about_photo_img_all = this.querySelectorAll("img");
let left=[0,-2,1,-1];
let top=[1,0,-1,-2];
for(let i = 0;i<about_photo_img_all.length;i++){
about_photo_img_all[i].style.left = left[i] * width+ "px";
about_photo_img_all[i].style.top = top[i] * height + "px";
}
}
ul.onmouseleave=function(){
let about_photo_img_all = this.querySelectorAll("img");
for(let i = 0;i<about_photo_img_all.length;i++){
about_photo_img_all[i].style.left = -(i % 2) * width+ "px";
about_photo_img_all[i].style.top = -Math.floor(i / 2) * height + "px";
}
}
}
}
let team_people_li_all=getDOMAll("#content > .list > .team .team_people > li")
let team_people = getDOM("#content > .list > .team .team_people")
let team_section=getDOM("#content > .list > .team > section")
bubble();
function bubble(){
let canvas = null;
let createBubbleTimer = 0;
let BubbleTimer = 0;
for(let i = 0;i<team_people_li_all.length;i++){
team_people_li_all[i].onmouseenter=function(){
for(let j = 0;j<team_people_li_all.length;j++){
team_people_li_all[j].style.opacity=".5"
}
this.style.opacity="1";
clearInterval(createBubbleTimer);
clearInterval(BubbleTimer);
addCanvas(this);
}
}
function addCanvas(li){
let liBound = li.getBoundingClientRect();
if(!canvas){
canvas = document.createElement("canvas");
canvas.width = liBound.width;
canvas.height = liBound.height*2/3;
canvas.style.position="absolute";
}
canvas.style.left=liBound.left*0.99+"px";
canvas.style.top=liBound.top*1.9/3+"px";
addBubble(canvas)
canvas.onmouseleave=function(){
for(let j = 0;j<team_people_li_all.length;j++){
team_people_li_all[j].style.opacity="1";
}
clearInterval(createBubbleTimer);
canvas.remove();
canvas=null;
clearInterval(BubbleTimer);
}
team_section.appendChild(canvas);
}
function addBubble(canvasEl){
if(canvasEl.getContext){
context = canvasEl.getContext("2d")
let arr=[];
createBubbleTimer=setInterval(function(){
let r = Math.random()*7+3;
let x = Math.random()*canvasEl.width;
let y = canvasEl.height-r;
let red = Math.round(Math.random()*255)
let blue = Math.round(Math.random()*255)
let green = Math.round(Math.random()*255)
let alp = Math.random()*1+0.3
let deg = 0;
let startX = x;
let startY = y;
let step = Math.random()*50+5;
arr.push({
x,
y,
r,
red,blue,green,alp,
deg,startX,startY,step
})
},100)
let a = null;
BubbleTimer = setInterval(function(){
context.clearRect(0,0,canvasEl.width,canvasEl.height);
for(let i = 0;i < arr.length;i++){
a = arr[i]
a.deg+=5
a.x = a.startX + Math.sin(a.deg*Math.PI/180)*a.step*2;
a.y = a.startY - (a.deg*Math.PI/180)*a.step;
if(a.y<=50){
arr.splice(i,1)
}
}
for(let i = 0;i < arr.length;i++){
a = arr[i];
context.save();
context.beginPath();
context.arc(a.x,a.y,a.r,0,2*Math.PI)
context.fillStyle="rgba("+a.red+","+a.green+","+a.blue+","+a.alp+")"
context.fill();
}
},7)
}
}
}
move(4)
}
</script>
</html>