当前位置:编程学习 > JS >>

JS+CSS多风格自由拖动的菜单窗口

你可以说她是一款可拖动的菜单,也可以说她干脆就是一个拖动层,有多种颜色风格,蓝色、绿色、亮黄色等……
  在这些可以拖动的DIV窗口里,还布局有多个漂亮的菜单,符合w3c WEB标准,对各种浏览器的兼容性都比较好。
答案:<html>
<head>
<title>JS+CSS自由拖动的菜单</title>
<style>
body { 
 background: #667788;
 font-family: tahoma;
 font-size: 16px;
 padding: 0;
 margin: 0;
 overflow: hidden;
 background:#669900;
}

h1 {
 font-size: 140%;
}
#window1 { 
 top: 50px;
 left: 50px;
 width: 400px;
 height: 300px;
}
#window2 { 
 top: 270px;
 left: 250px;
 width: 400px;
 height: 300px;
}
#window3 { 
 top: 150px;
 left: 400px;
 width: 300px;
 height: 300px;
}
#window4 { 
 top: 200px;
 right: 100px;
 width: 400px;
 height: 350px;
}
#window1 .border {
 border-color: #F8E0C0;
}
#window1 .glass {
 background: #F8E0C0; 
}

#window2 .border {
 border-color: #E0F8C0;
}
#window2 .glass {
 background: #E0F8C0; 
}

#window3 .border {
 border-color: #E0F0F8;
}
#window3 .glass {
 background: #E0F0F8; 
}

.window {
 position: absolute;
}
.shadow {
  position: absolute;
  top: -2px;
  left: -2px;
  width: 100%;
  height: 100%;
  background-color: #4F7500;
 }
.glass {
 position: absolute;
 top: 0px;
 left: 0px;
 width: 100%;
 height: 100%;
 background-color: #4F7500; 
 }
.border {
 position: absolute;
 top: 0px;
 left: 0px;
 width: 100%;
 height: 100%;
 border: 1px solid #F0F0F0;
 padding: 80px 10px 10p 10px;
}
.content {
 height: 100%;
 width: 100%;
 overflow: auto;
 background: white;
 padding: 0.5em;
 cursor: default;
 filter: alpha(opacity=60);
}
.title {
 color: white;
 font-weight: bold;
 font-size: 20px;
 position: absolute;
 top: 0px;
 left: 0px;
 width: 100%;
 height: 80px;
 padding: 25px 20px;
 cursor: move;
}
.current .shadow {
 top: 1px;
 left: 1px;
}
.current .content {
 filter: none;
}
.current .title {
 z-index: 1;
}

#menu { 
 position: absolute; 
 border: 1px solid rgb(182, 184, 196); 
 padding: 1px 2px; 
 background: #f4f4f5;
 font-family: trebuchet ms; 
 font-size: 9pt; 
}
#menu a { 
 display: block; 
 width: 200px; 
 color: black; 
 text-decoration: none; 
 height: 18px; 
 cursor: default;
}
#menu a i { 
 display: block; float: left;
 position:relative; 
 height: 14px; width: 26px;
 background: #ececed;
 border-left: 1px solid #ffffff; 
 border-right: 1px solid #e0e0e1;
 margin-left: -2px; 
 margin-right: -3px;
 padding: 2px 0px;
}
#menu a span { 
 display: block; 
 position:relative; 
 height: 14px; 
 background: #f4f4f5;
 border-left: 1px solid #ffffff;
 border-right: 1px solid #ffffff;
 padding: 2px 3px;
 margin-right: -2px;
}
.current #menu a:hover { 
 border: 1px solid; border-color: rgb(158, 215, 240) #ffffff; 
 padding: 0px;
}
.current #menu a:hover i { 
 border: 1px solid; 
 border-color: #ececed #e0e0e1 #d8e0f0 rgb(158, 215, 240); 
 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffe2eaf2, endColorstr=#ffd8e0f0);
 padding: 0px;
 width: 25px;
}
.current #menu a:hover span { 
 border: 1px solid; 
 border-color: #f4f4f5 rgb(158, 215, 240) #e8f2f8 #e8f2f8; 
 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffeef2f8, endColorstr=#ffddedf8);
 padding: 0px 3px;
}
</style>
<script>
var current = null;
var dragging = false;
var startedDragging = false;
function setCurrent(w)
{
 if (w != current)
 {
 
 if (current)
 current.className = 'window';
 current = w;
 current.className = 'current window';
 document.getElementById("windows").appendChild(current);
 }

 var offsetX = event.x - parseInt(w.currentStyle.left);
 var offsetY = event.y - parseInt(w.currentStyle.top);
 if (offsetY < 80)
 {
 dragging = true;
 dragEffect = function()
 {
 w.style.pixelLeft = event.x - offsetX;
 w.style.pixelTop = event.y - offsetY;
 }
 } 
 else 
 {
 var width = parseInt(w.currentStyle.width);
 var resizeX = offsetX > width - 10;
 var height = parseInt(w.currentStyle.height);
 var resizeY = offsetY > height - 10;
 if (resizeX || resizeY)
 {
 dragging = true;
 var offsetX = event.x - width;
 var offsetY = event.y - height;

 dragEffect = function()
 {
 if (resizeX)
 w.style.pixelWidth = event.x - offsetX;
 if (resizeY)
 w.style.pixelHeight = event.y - offsetY;
 }
 }
 } 
}

function calcResize(w)
{
 var offsetX = event.x - parseInt(w.currentStyle.left);
 var offsetY = event.y - parseInt(w.currentStyle.top);
 var width = parseInt(w.currentStyle.width);
 var resizeX = offsetX > width - 10;
 var height = parseInt(w.currentStyle.height);
 var resizeY = offsetY > height - 10;
 w.style.cursor = (resizeX||resizeY)?(resizeY?"S":"")+(resizeX?"E":"")+"-resize":"default";
}

var dragEffect;
function moveCurrent()
{
 if (!dragging || !current)
 return;
 
 if (event.button == 0)
 {
 releaseCurrent();
 return;
 }
 
 if (!startedDragging)
 {
 current.className = 'dragging current window';
 startedDragging = true;
 }
 
 dragEffect();
}

function releaseCurrent()
{
 if (!current)
 return;
 
 current.className = 'current window';
 dragging = false;
 startedDragging = false;
}

function makeUnselectable(e)
{
 e.unselectable=true;
 if (e.className == 'content')
 return;
 
 for (var c=e.firstChild;c;c=c.nextSibling)
 if (c.nodeType == 1)
 makeUnselectable(c);
}
</script>
</head>
<body onload="makeUnselectable(document.body);setCurrent(window1)" onmouseup="releaseCurrent()" onmousemove="moveCurrent()">
<div id="windows">
<div class="window" id="window1" onmousedown="setCurrent(this)" onmousemove="calcResize(this)">
 <div class="shadow"></div>
 <div class="title">Windows Title</div>
 <div class="glass"></div>
 <div class="border">
 <div class="content">
 <h1>Windows Longhorn Glass Look</h1>
 <p>本处除了背景用到图像外,其它任何地方均没用到。</p>
 <p>Looks horrible in any browser but Internet Explorer.</p>
 <p align="right">Sjoerd Visscher, 2009</p>
 </div>
 </div>
</div>
<div class="window" id="window3" onmousedown="setCurrent(this)" onmousemove="calcResize(this)">
 <div class="shadow"></div>
 <div class="title">蓝色的窗口</div>
 <div class="glass"></div>
 <div class="border">
 <div class="content">站长资源库提供各类编程源码、书籍教程、JavaScript/CSS特效代码以及常用软件下载等。
 </div>
 </div>
</div>
<div class="window" id="window4" onmousedown="setCurrent(this)" onmousemove="calcResize(this)">
 <div class="shadow"></div>
 <div class="title">Longhorn 菜单</div>
 <div class="glass"></div>
 <div class="border">
 <div class="content">
 <div id="menu">
 <a href="/"><i></i><span>网页特效</span></a>
 <a href="/"><i></i><span>最新特效</span></a>
 <a href="/"><i></i><span>更新排行</span></a>
 </div>
 </div>
 </div>
</div>
<div class="window" id="window2" onmousedown="setCurrent(this)" onmousemove="calcResize(this)">
 <div class="shadow"></div>
 <div class="title">绿色窗口</div>
 <div class="glass"></div>
 <div class="border">
 <div class="content">
 </div>
 </div>
</div>
</div>
</body>
</html>

上一个:CSS用滤镜打造的椭圆型导航菜单
下一个:展开、折叠的垂直两级菜单,可用到后台左侧

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,