06年的一篇blog,转到这个博客上:

很早之前写的,后来由于这个功能模块取消,最终没有上线,所以与Server交互的那部分还没有写,不过那部分方案我也已经出来了,而且现在客户端这一部分已经通过了比较完备的测试。大家看看这一部分的代码,应该一看就懂。 那时候也不知道那么多js的UI库,所以全部都是自己绘制的,界面有点简陋,希望凑或者看吧,再就是我们这个项目是局域网项目,所以大家用的都是IE,没有考虑跨浏览器的因素。发出来希望对做同样应用的同志少走点弯路,我写的时候,网上没有这方面的代码,现在有没有就不知道了。

网页代码:

<%@page contentType="text/html; charset=gb2312" pageEncoding="GB2312" %>
<%@ page language="java"%>
<%@ page import="java.util.List" %>
<style>
th.timem {font-size: 8pt; font-family: Times New Roman;}
td.reserved {background-color: #FF0066}
td.free {background-color: #99CCFF}
td.selected {background-color: #ccCCFF}
</style>
<script language="JavaScript" type="text/javascript" src="timetable.js"></script>
<script>
<!--
var dragging=false;//是否在拖拽
var OrignCell="";//开始格位
var CurrentCell="";//当前格位
var pope;
window.onload=function()
{
try{
pope=document.getElementById("pop");
var tp=document.getElementById('TablePosition');
var tt=CreateTable();
tp.appendChild(tt);
SetReserves();
document.getElementById('2-5').className="reserved";
document.getElementById('5-10').className="reserved";//for test
}catch(e)
{
alert(e.name + ": " + e.message);
}
}
//设置已预订单元
function SetReserves()
{
//Insert the Reserved Cells Intialation by SetReserve() }
-->
</script>
<div id="pop" style="position:absolute;width:50; display: none; z-index:99; font-size: 13px; background:#FFCCFF;filter:alpha(opacity=40); border-style: solid; border-width: thin;border-color:#FF66CC; " >
<div onclick="Reserve()" style="{cursor: hand;} ">预订</div>
<hr size=0.1 color=#FF66CC;>
<div onclick="Cancel()"style="{cursor: hand;} ">取消</div>
</div>
<div id="TablePosition" >
</div>
//创建会议室预订情况时间表
function CreateTable()
{
var tt=document.createElement("table");
var tbody=document.createElement("tbody");
tt.onmouseout=OutDragT;
tbody.onmouseout=CancleBubble;
tt.appendChild(tbody);
tt.border='1';
tt.id='TimeTable';
tt.cellSpacing ="1";//???????????
tt.borderColor="#6699ff";
tt.align='center';
tt.onselectstart =False;
for(var i=0;i<6;i++)
{
var tr=document.createElement("tr");
for(var j=0;j<18;j++)
{
var hd=document.createElement("td");
hd.id=i+'-'+j;
hd.innerHTML=" ";
hd.onmousedown = BeginDrag;
hd.onmousemove = OnDrag;
hd.onmouseup = EndDrag;
hd.className="free";///for test
hd.onmouseover=onshow;
if(i==0)
{
hd=document.createElement("th");
hd.className='timem';
hd.width='30';
if(j==0)
{
hd.innerHTML=" "
}else{
var hour=8+Math.floor(j/2);
var minutes=30*(j%2);
hd.appendChild(document.createTextNode(hour+':'+minutes));
}
}
if(j==0&&i!=0)
{
hd=document.createElement("th");
hd.className='timem';
hd.appendChild(document.createTextNode('?'+i));
}
tr.appendChild(hd);
}
tbody.appendChild(tr);
} return tt;
} function SetReserve(id)
{
document.getElementById(id)="reserved";
}
//取消事件冒泡
function CancleBubble()
{
event.cancelBubble=true;
}
//拖拽选择开始函数
function BeginDrag()
{
if (event.button != 1)
{
return;
}
OrignCell=this.id;
CurrentCell=this.id;
if(ModifyClass())
{
dragging=true;
}else{
alert("????????!");
OrignCell="";
CurrentCell="";
}
}
//拖拽过程处理函数
function OnDrag()
{
if(dragging==false||this.id==CurrentCell)
{
return; }
CurrentCell=this.id;
if(!ModifyClass())
{
Reverse()
dragging=false;
OrignCell="";
CurrentCell="";
pope.style.display = 'none';
alert("?????????????!"); }
}
//结束拖拽
function EndDrag()
{
if(dragging==false)
{
return;
}
dragging==false;
pope.style.top=event.clientY
pope.style.left=event.clientX
pope.style.display = "";
}
//本为处理鼠标过界操作后作他用
function OutDrag()
{
if(dragging==false)
{
return;
}
//???
Reverse();
dragging=false; }
//Handler for mousemoveout of timetable
function OutDragT()
{
var Tt=document.getElementById("TimeTable");
if(event.clientX<=Tt.offsetLeft||event.clientX>=(Tt.offsetLeft+Tt.offsetWidth)||event.clientY<=Tt.offsetTop||event.clientY>=(Tt.offsetTop+Tt.offsetHeight))
{
OutDrag();
window.status="";
}
}
function False()
{
return false;
}
//修正各单元格的状态并返回结果
function ModifyClass()
{ Reverse(); for(var i=X1();i<=X2();i++)
{
for(var j=Y1();j<=Y2();j++)
{
var CName =document.getElementById(i+"-"+j).className;
if(CName.indexOf("reserved")!=-1)
{
return false;
}
if(CName.indexOf("selected")!=-1)
{
continue;
}
if(CName.indexOf("free")!=-1)
{
document.getElementById(i+"-"+j).className="selected";
}
}
}
return true;
}
//返回初始状态
function Reverse()
{
for(var i=1;i<6;i++)
{
for(var j=1;j<18;j++)
{
var CName =document.getElementById(i+"-"+j).className;
if(CName.indexOf("selected")!=-1)
{
document.getElementById(i+"-"+j).className="free";
}
}
}
}
//取消选择
function Cancel()
{
pope.style.display = 'none';
OutDrag();
dragging=false;
}
//预订操作
function Reserve()
{
pope.style.display = 'none';
alert("????!")
dragging=false;
}
//选择区域的横方向小坐标
function X1()
{
var Bx,Ex;
var TArray=OrignCell.split('-');
Bx=parseInt(TArray[0]);
TArray=CurrentCell.split('-');
Ex=parseInt(TArray[0]);
return Bx<=Ex?Bx:Ex; }
//选择区域的横方向大坐标
function X2()
{
var Bx,Ex;
var TArray=OrignCell.split('-');
Bx=parseInt(TArray[0]);
TArray=CurrentCell.split('-');
Ex=parseInt(TArray[0]);
return Bx>=Ex?Bx:Ex;
}
//选择区域的纵方向小坐标
function Y1()
{
var Bx,Ex;
var TArray=OrignCell.split('-');
Bx=parseInt(TArray[1]);
TArray=CurrentCell.split('-');
Ex=parseInt(TArray[1]);
return Bx<=Ex?Bx:Ex;
}
//选择区域的纵方向大坐标
function Y2()
{
var Bx,Ex;
var TArray=OrignCell.split('-');
Bx=parseInt(TArray[1]);
TArray=CurrentCell.split('-');
Ex=parseInt(TArray[1]);
return Bx>=Ex?Bx:Ex;
}
//显示选择情况!
function onshow()
{
window.status="Cell:"+OrignCell+"::"+CurrentCell+dragging;
}

基于JS的WEB会议室预订拖拽式图形界面的实现的更多相关文章

  1. 使用原生JavaScript的Canvas实现拖拽式图形绘制,支持画笔、线条、箭头、三角形、矩形、平行四边形、梯形以及多边形和圆形,不依赖任何库和插件,有演示demo

    前言 需要用到图形绘制,没有找到完整的图形绘制实现,所以自己实现了一个 - - 一.实现的功能 1.基于oop思想构建,支持坐标点.线条(由坐标点组成,包含方向).多边形(由多个坐标点组成).圆形(包 ...

  2. 纯JS Web在线可拖拽的流程设计器

    F2工作流引擎之-纯JS Web在线可拖拽的流程设计器 Web纯JS流程设计器无需编程,完全是通过鼠标拖.拉.拽的方式来完成,支持串行.并行.分支.异或分支.M取N路分支.会签.聚合.多重聚合.退回. ...

  3. atitit.D&D drag&drop拖拽文件到界面功能 html5 web 跟个java swing c#.net c++ 的总结

    atitit.D&D drag&drop拖拽文件到界面功能 html5 web 跟个java swing c#.net c++ 的总结 1. DND的操作流程 1 2. Html5 注 ...

  4. 原生js实现Canvas实现拖拽式绘图,支持画笔、线条、箭头、三角形和圆形等等图形绘制功能,有实例Demo

    前言 需要用到图形绘制,没有找到完整的图形绘制实现,所以自己实现了一个 - - 演示地址:查看演示DEMO 新版本支持IE5+(你没看错,就是某软的IE浏览器)以上任意浏览器的Canvas绘图:htt ...

  5. JS实现漂亮的窗口拖拽效果(可改变大小、最大化、最小化、关闭)

    转自<JS实现漂亮的窗口拖拽效果(可改变大小.最大化.最小化.关闭)>:http://www.jb51.net/article/73157.htm   这篇文章主要介绍了JS实现漂亮的窗口 ...

  6. 拖拽系列二、利用JS面向对象OOP思想实现拖拽封装

    接着上一篇拖拽系列一.JavaScript实现简单的拖拽效果这一篇博客将接着对上一节实现代码利用JS面向对象(OOP)思维对上一节代码进行封装; 使其模块化.避免全局函数污染.方便后期维护和调用:写到 ...

  7. (Demo分享)利用JavaScript(JS)实现一个九宫格拖拽功能

    利用JavaScript(JS)实现一个九宫格拖拽功能   Demo实现了对任意方格进行拖拽,可以交换位置,其中Demo-1利用了勾股定理判断距离! Demo-1整体思路: 1.首先div实现自由移动 ...

  8. EgLine V0.3—LVGL官方拖拽式UI编辑工具(可导出代码)

    ** EdgeLine ** 是LVGL官方团队退出的一款拖拽式UI编辑工具,现在还处于测试间断,目前最新版本为v0.3,已经可导出代码. 注意: 使用该软件需要注册lvgl账号,这一步可能需要代理 ...

  9. 【原创】js实现一个可随意拖拽排序的菜单导航栏

    1.想做这个效果的原因主要是用在UC上看新闻发现他们的导航菜单很有趣.无聊的时候在哪划着玩了很久.所以就干脆自己写一个.原效果如下 2.整体效果如下,在已推荐和未添加里面每个小方块可以触摸移动位置互换 ...

随机推荐

  1. SVM及其c++代码运用实例

    最近做个小东西,要用到SVM,搜索网上,发现大伙都是各种介绍理论,让我等小码农晕头转向,是故自己学习总结一下,并将代码实例展示出来,方便大家共同探讨,该代码是用opencv编写的,很容易学习滴. 1. ...

  2. Mybatis源码之Statement处理器PreparedStatementHandler(五)

    PreparedStatementHandler就是调用PreparedStatement来执行SQL语句,这样在第一次执行sql语句时会进行预编译,在接下来执行相同的SQL语句时会提高数据库性能 源 ...

  3. xml解析之使用dom4j的api对xml文件进行CRUD(二)

    在使用dom4j的api对xml文件进行CRUD(一)见博客http://blog.csdn.net/qq_32059827/article/details/51524330的基础上,再对做一次练习. ...

  4. 【嵌入式开发】 Linux Kernel 下载 配置 编译 安装 及 驱动简介

    作者 : 韩曙亮 转载请出名出处 : http://blog.csdn.net/shulianghan/article/details/38636827 一. Linux 内核简介 1. 内核功能简介 ...

  5. 海量数据挖掘MMDS week4: 推荐系统Recommendation System

    http://blog.csdn.net/pipisorry/article/details/49205589 海量数据挖掘Mining Massive Datasets(MMDs) -Jure Le ...

  6. 关于Eclipse创建Android项目时,会多出一个appcompat_v7的问题

     问题描述: 使用eclipse创建一个Android项目时,发现project列表中会多创建出一个appcompat_v7项目,再创建一个Android项目时,又会再多出一个appcompat_ ...

  7. 敏捷测试(4)--基于story的敏捷基础知识

    基于story的敏捷基础知识----需求管理(一) 基于story进行需求管理 (1)使用story模式来管理需求,将庞大的MRD划分为一个个合适粒度,且可独立交付的story(通常每个story能在 ...

  8. (五十九)iOS网络基础之UIWebView简易浏览器实现

    [UIWebView网络浏览器] 通过webView的loadRequest方法可以发送请求显示相应的网站,例如: NSURL *url = [NSURL URLWithString:@"h ...

  9. 文件I/O实践(1) --基础API

    什么是I/O 输入/输出是内存和外设之间拷贝数据的过程: 设备->内存: 输入操作 内存->设备: 输出操作 高级I/O: ANSI C提供的标准I/O库函数成为高级I/O, 也称为带缓冲 ...

  10. python,os操作文件,文件路径(上一级目录)

    python获取文件上一级目录:取文件所在目录的上一级目录 os.path.abspath(os.path.join(os.path.dirname('settings.py'),os.path.pa ...