nav collapse
This commit is contained in:
parent
a1011b18f9
commit
dbc82b0711
263
index.html
263
index.html
@ -187,133 +187,186 @@ h2[data-spy='true'] > span:first-child::before, h2[data-spy='true'] > span:last-
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<script>
|
||||
var Spy =
|
||||
</script>
|
||||
<script>
|
||||
var Spy =
|
||||
{
|
||||
Attribute:"data-spy",
|
||||
Members:[],
|
||||
Defaults:[0, 1, 0, 1],
|
||||
Disabled:false,
|
||||
Suspend:function()
|
||||
{
|
||||
Attribute:"data-spy",
|
||||
Members:[],
|
||||
Defaults:[0, 1, 0, 1],
|
||||
Disabled:false,
|
||||
Suspend:function()
|
||||
{
|
||||
Spy.Disabled = true;
|
||||
},
|
||||
Resume:function()
|
||||
{
|
||||
Spy.Disabled = false;
|
||||
Spy.UpdateAll();
|
||||
},
|
||||
UpdateAll:function()
|
||||
{
|
||||
var i, member, aabb, top, bottom, left, right;
|
||||
var visible;
|
||||
Spy.Disabled = true;
|
||||
},
|
||||
Resume:function()
|
||||
{
|
||||
Spy.Disabled = false;
|
||||
Spy.UpdateAll();
|
||||
},
|
||||
UpdateAll:function()
|
||||
{
|
||||
var i, member, aabb, top, bottom, left, right;
|
||||
var visible;
|
||||
|
||||
if(Spy.Disabled){ return; }
|
||||
if(Spy.Disabled){ return; }
|
||||
|
||||
for(i=0; i<Spy.Members.length; i++)
|
||||
for(i=0; i<Spy.Members.length; i++)
|
||||
{
|
||||
member = Spy.Members[i];
|
||||
|
||||
top = window.innerHeight * member.Bounds[0];
|
||||
bottom = window.innerHeight * member.Bounds[1];
|
||||
left = window.innerWidth * member.Bounds[2];
|
||||
right = window.innerWidth * member.Bounds[3];
|
||||
|
||||
aabb = member.Element.getBoundingClientRect();
|
||||
visible = (aabb.top < bottom && aabb.bottom > top) && (aabb.left < right && aabb.right > left);
|
||||
if(visible != member.Visible)
|
||||
{
|
||||
member = Spy.Members[i];
|
||||
|
||||
top = window.innerHeight * member.Bounds[0];
|
||||
bottom = window.innerHeight * member.Bounds[1];
|
||||
left = window.innerWidth * member.Bounds[2];
|
||||
right = window.innerWidth * member.Bounds[3];
|
||||
|
||||
aabb = member.Element.getBoundingClientRect();
|
||||
visible = (aabb.top < bottom && aabb.bottom > top) && (aabb.left < right && aabb.right > left);
|
||||
if(visible != member.Visible)
|
||||
{
|
||||
member.Element.setAttribute(Spy.Attribute, visible);
|
||||
member.Visible = visible;
|
||||
member.Change(visible);
|
||||
}
|
||||
member.Element.setAttribute(Spy.Attribute, visible);
|
||||
member.Visible = visible;
|
||||
member.Change(visible);
|
||||
}
|
||||
},
|
||||
Create:function(inElement)
|
||||
{
|
||||
var j, bounds;
|
||||
var attr;
|
||||
var obj;
|
||||
attr = inElement.getAttribute(Spy.Attribute)||"";
|
||||
inElement.removeAttribute(Spy.Attribute);
|
||||
bounds = attr.split("|");
|
||||
for(j=0; j<Spy.Defaults.length; j++)
|
||||
{
|
||||
if(bounds[j])
|
||||
{
|
||||
bounds[j] = parseFloat(bounds[j]);
|
||||
}
|
||||
else
|
||||
{
|
||||
bounds[j] = Spy.Defaults[j];
|
||||
}
|
||||
}
|
||||
obj = {
|
||||
Element:inElement,
|
||||
Bounds:bounds,
|
||||
Visible:undefined,
|
||||
Change:function(){}
|
||||
};
|
||||
Spy.Members.push(obj);
|
||||
return obj;
|
||||
},
|
||||
CreateAll:function()
|
||||
{
|
||||
var i, elements;
|
||||
elements = document.querySelectorAll("*["+Spy.Attribute+"]");
|
||||
|
||||
for(i=0; i<elements.length; i++)
|
||||
{
|
||||
Spy.Create(elements[i]);
|
||||
}
|
||||
},
|
||||
Init:function()
|
||||
{
|
||||
Spy.CreateAll();
|
||||
Spy.UpdateAll();
|
||||
document.addEventListener("scroll", Spy.UpdateAll, {passive:true});
|
||||
window.addEventListener("resize", Spy.UpdateAll, {passive:true});
|
||||
}
|
||||
};
|
||||
</script>
|
||||
},
|
||||
Create:function(inElement)
|
||||
{
|
||||
var j, bounds;
|
||||
var attr;
|
||||
var obj;
|
||||
attr = inElement.getAttribute(Spy.Attribute)||"";
|
||||
inElement.removeAttribute(Spy.Attribute);
|
||||
bounds = attr.split("|");
|
||||
for(j=0; j<Spy.Defaults.length; j++)
|
||||
{
|
||||
if(bounds[j])
|
||||
{
|
||||
bounds[j] = parseFloat(bounds[j]);
|
||||
}
|
||||
else
|
||||
{
|
||||
bounds[j] = Spy.Defaults[j];
|
||||
}
|
||||
}
|
||||
obj = {
|
||||
Element:inElement,
|
||||
Bounds:bounds,
|
||||
Visible:undefined,
|
||||
Change:function(){}
|
||||
};
|
||||
Spy.Members.push(obj);
|
||||
return obj;
|
||||
},
|
||||
CreateAll:function()
|
||||
{
|
||||
var i, elements;
|
||||
elements = document.querySelectorAll("*["+Spy.Attribute+"]");
|
||||
|
||||
for(i=0; i<elements.length; i++)
|
||||
{
|
||||
Spy.Create(elements[i]);
|
||||
}
|
||||
},
|
||||
Init:function()
|
||||
{
|
||||
Spy.CreateAll();
|
||||
Spy.UpdateAll();
|
||||
document.addEventListener("scroll", Spy.UpdateAll, {passive:true});
|
||||
window.addEventListener("resize", Spy.UpdateAll, {passive:true});
|
||||
}
|
||||
};
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<style>
|
||||
nav
|
||||
{
|
||||
border: 20px solid #0000;
|
||||
/* margin: 20px; */
|
||||
/* padding: 20px; */
|
||||
position: fixed;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
top:50px;
|
||||
display: block;
|
||||
top: 0px;
|
||||
right: 0px;
|
||||
width: 200px;
|
||||
z-index:10;
|
||||
height: 600px;
|
||||
background:white;
|
||||
box-shadow: 0px 5px 10px rgba(0, 0, 0, 0.3);
|
||||
border-left:10px solid black;
|
||||
z-index: 10;
|
||||
height: 85px;
|
||||
overflow: hidden;
|
||||
box-shadow: 0px 3px 10px black;
|
||||
transition: height 0.4s;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
nav > *
|
||||
nav:hover{
|
||||
height:100%;
|
||||
}
|
||||
nav > span.cap
|
||||
{
|
||||
flex: 1;
|
||||
display:block;
|
||||
position:absolute;
|
||||
left:0;
|
||||
width:100%;
|
||||
height:33px;
|
||||
}
|
||||
nav > span.cap--top
|
||||
{
|
||||
top:0;
|
||||
}
|
||||
nav > span.cap--bottom
|
||||
{
|
||||
bottom:0;
|
||||
}
|
||||
nav > span.cap::before
|
||||
{
|
||||
content: "⬦";
|
||||
line-height: 37px;
|
||||
font-size: 60px;
|
||||
font-weight:900;
|
||||
text-indent:-10px;
|
||||
display: block;
|
||||
position: relative;
|
||||
top: 0px;
|
||||
width: 0%;
|
||||
height: 31px;
|
||||
background: #000;
|
||||
transition: width 0.4s;
|
||||
}
|
||||
nav > span.edge
|
||||
{
|
||||
border: 30px solid transparent;
|
||||
border-right: 0px;
|
||||
content: " ";
|
||||
display: block;
|
||||
position: absolute;
|
||||
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
|
||||
box-sizing: border-box;
|
||||
}
|
||||
nav > span.edge::before
|
||||
{
|
||||
content:" ";
|
||||
display:block;
|
||||
position:absolute;
|
||||
top:0;
|
||||
left:-16px;
|
||||
width:5px;
|
||||
height:100%;
|
||||
background:black;
|
||||
}
|
||||
nav > ul
|
||||
{
|
||||
flex:0;
|
||||
margin:0;
|
||||
padding:0;
|
||||
text-align:right;
|
||||
}
|
||||
nav > span
|
||||
{
|
||||
margin:20px;
|
||||
background:red;
|
||||
position:relative;
|
||||
padding:10px;
|
||||
margin:32px 0 32px 0;
|
||||
}
|
||||
</style>
|
||||
<nav>
|
||||
<span></span>
|
||||
<span class="cap cap--top"></span>
|
||||
<span class="cap cap--bottom"></span>
|
||||
<span class="edge"></span>
|
||||
<ul>
|
||||
<li><a href="#top" >Top</a></li>
|
||||
<li><a href="#order">Order</a></li>
|
||||
@ -322,7 +375,7 @@ nav > span
|
||||
<li><a href="#specs">Specs</a></li>
|
||||
<li><a href="#email">Sign-up</a></li>
|
||||
</ul>
|
||||
<span></span>
|
||||
|
||||
</nav>
|
||||
<main>
|
||||
<section id="order">
|
||||
|
Loading…
Reference in New Issue
Block a user