You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

349 lines
11 KiB

<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'showPic.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
<title>he knew - Interactive DHTML art-demos</title>
<meta http-equiv="imagetoolbar" content="no">
<style type="text/css">
html { overflow: hidden; }
body { position: absolute; margin: 0px; padding: 0px; background: #222; width: 100%; height: 100%; }
#screen { position: absolute; width: 100%; height: 100%; background: #000; }
#screen img { position:absolute; width:0px; height:0px; border:none; -ms-interpolation-mode:nearest-neighbor; image-rendering: optimizeSpeed; }
#screen .wall { position:absolute; background:transparent; border-style:solid; border-width:0px; width:0px; height:0px; font-size:0px; z-index:1; }
#screen .trans { position:absolute; left:-10000px; background:#FFF; filter:alpha(opacity=20); opacity:0.2; font-size:1px; border:#000 solid 1px; }
#screen .txt { position:absolute; }
#screen .plo { position: absolute; color:#ccc; font-family: arial; white-space: nowrap; font-size: 10px; letter-spacing:2px; }
</style>
<script type="text/javascript">
var v3D = function () {
/* ---- private vars ---- */
var scr,
nx,
ny,
nw,
nh,
xm = 0,
ym = 0,
y0 = 0,
camera = {
x : 0,
y : 11100,
z : 10000
},
N = 0,
oT = [],
pT = [],
Zeye = -100,
hm = 20,
cb = true,
mv = false;
/* ====== create HTML ====== */
var createHTML = function (tag, container, clas, src, html) {
var obj = document.createElement(tag);
if (clas) obj.className = clas;
if (src) obj.src = src;
if (html) obj.innerHTML = html;
container.appendChild(obj);
return obj;
}
/* ====== DOM events ====== */
var addEvent = function (o, e, f) {
if (window.addEventListener) o.addEventListener(e, f, false);
else if (window.attachEvent) r = o.attachEvent('on' + e, f);
}
/* ====== screen dimensions ====== */
var resize = function () {
nw = scr.offsetWidth * .5;
nh = scr.offsetHeight * .5;
var o = scr;
for (nx = 0, ny = 0; o != null; o = o.offsetParent) {
nx += o.offsetLeft;
ny += o.offsetTop;
}
}
/* ====== zOOm ====== */
var zOOm = function (z) {
var z0 = Zeye - z;
if (z0 > 0 ) z0 = -.0001;
z0 = Zeye / z0;
if(z0 > 10) z0 = 10;
cb = (z > Zeye * .9);
return z0;
}
/* ====== Images constructor ====== */
var Tab = function (img) {
/* ---- get params from HTML properties ---- */
var coord = img.alt.split(",");
img.alt = "";
this.X = coord[0] * 100;
this.Y = coord[1] * 100;
this.Z = coord[2] * 100;
this.W = coord[3] * 100;
this.H = coord[4] * 100;
/* ---- create frame ---- */
this.pol = createHTML("div", scr, "trans");
this.pol.style.zIndex = 1000 - Math.round(this.Z);
this.img = img;
this.img.style.zIndex = 1001 - Math.round(this.Z);
/* ---- click on images ---- */
this.img.obj = this;
if (!this.img.parentNode.href) {
this.img.style.cursor = "crosshair";
this.img.onclick = function () {
hm = -80 - this.obj.Z;
return false;
}
}
/* ---- create text ---- */
this.txt = createHTML("div", scr, "txt");
this.txt.style.zIndex = 1010 - Math.round(this.Z);
var txt = createHTML("div", this.txt, "plo", "","<22><>" + img.title + "<22><>");
this.txt.txt = txt;
this.L = img.title.length * 2;
img.title = "";
/* ---- CSS3 text Transform ---- */
if ('MozTransform' in document.body.style) {
this.txt.css3Transform = function (x, y, s) {
this.style.MozTransform = "translate(" + x + "px," + y + "px) scale(" + s + ")";
}
} else if ('webkitTransform' in document.body.style) {
this.txt.css3Transform = function (x, y, s) {
this.style.webkitTransform = "translate(" + x + "px," + y + "px) scale(" + s + ")";
}
} else if (scr.style.zoom) {
this.txt.css3Transform = function (x, y, s) {
this.style.left = x + 'px';
this.style.top = y + 'px';
this.txt.style.zoom = s;
}
} else {
this.txt.css3Transform = function (x, y, s) {
this.style.left = x + 'px';
this.style.top = y + 'px';
this.txt.style.fontSize = Math.round(s * 10) + "px";
}
}
}
Tab.prototype.anim = function () {
var z0 = zOOm(camera.y + this.Z);
if (cb) {
var x = (camera.x + this.X) * z0;
var y = (camera.z + this.Y) * z0;
/* ---- transparent frame ---- */
var css = this.pol.style;
css.visibility = "visible";
css.left = Math.round(nw + x) + "px";
css.top = Math.round(nh + y) + "px";
css.width = Math.round(this.W * z0) + "px";
css.height = Math.round(this.H * z0) + "px";
/* ---- image ---- */
css = this.img.style;
css.visibility = "visible";
css.left = Math.round(nw + x + (this.W * z0 * .1)) + "px";
css.top = Math.round(nh + y + (this.H * z0 * .1)) + "px";
css.width = Math.round(this.W * z0 * .8) + "px";
css.height = Math.round(this.H * z0 * .8) + "px";
/* ---- title ---- */
if (z0 > .3 ) {
this.txt.style.visibility = "visible";
this.txt.css3Transform(
Math.round(nw - (this.L * z0) + (this.W * z0 * 0.5) + (x * 1.3)),
Math.round(nh + (this.H * z0 * 0.2) + (y * 1.3)),
z0 * 1
);
} else this.txt.style.visibility = "hidden";
} else {
/* ---- behind camera ---- */
this.pol.style.visibility = "hidden";
this.img.style.visibility = "hidden";
this.txt.style.visibility = "hidden";
}
}
/* ====== Walls constructor ====== */
var Wall = function (X, Y, Z) {
this.X = X;
this.Y = Y;
this.Z = Z;
this.o1 = createHTML("div", scr, "wall");
this.o2 = createHTML("div", scr, "wall");
this.o3 = createHTML("div", scr, "wall");
}
Wall.prototype.anim = function () {
var x = [];
var y = [];
/* ---- 3D ---- */
for (var i = 0; i < 4; i++) {
var z0 = zOOm(camera.y + this.Z[i] * 100);
x[i] = Math.round(nw + (camera.x + this.X[i] * 100) * z0);
y[i] = Math.round(nh + (camera.z + this.Y[i] * 100) * z0);
}
/* ---- clipping ---- */
if(x[1] < 0 || x[0] > nw * 2) {
x[0] = 0;
y[0] = 0;
x[1] = 0;
y[1] = 0;
x[2] = 0;
y[2] = 0;
x[3] = 0;
y[3] = 0;
}
if(x[0] < 0) {
var k = (y[1] - y[0]) / (x[1] - x[0]) * x[1];
x[0] = 0;
y[0] = Math.round(y[1] - k);
k = (y[3] - y[2]) / (x[2] - x[3]) * x[2];
x[3] = 0;
y[3] = Math.round(y[2] + k);
}
if(x[1] > nw * 2) {
var k = (y[0] - y[1]) / (x[1] - x[0]) * ((nw * 2) - x[0]);
x[1] = nw * 2;
y[1] = Math.round(y[0] - k);
k = (y[2] - y[3]) / (x[2] - x[3]) * ((nw * 2) - x[3]);
x[2] = nw * 2;
y[2] = Math.round(y[3] + k);
}
/* ---- top ---- */
var css = this.o1.style;
if( y[1] >= y[0]) {
css.borderColor = "transparent transparent transparent #FFFFFF";
css.borderWidth = Math.round(y[1] - y[0]) + "px 0 0 " + Math.round(x[1] - x[0]) + "px";
css.left = Math.round(x[0]) + "px";
css.top = Math.round(y[0]) + "px";
} else {
css.borderColor = "transparent transparent #FFFFFF transparent";
css.borderWidth = "0 0 " + Math.round(y[0] - y[1]) + "px " + Math.round(x[1] - x[0]) + "px";
css.left = Math.round(x[0]) + "px";
css.top = Math.round(y[1]) + "px";
}
/* ---- bottom ---- */
css = this.o3.style;
if(y[3] >= y[2]){
css.borderColor = "transparent transparent transparent #FFFFFF";
css.borderWidth = "0 0 " + Math.round(y[3] - y[2]) + "px " + Math.round(x[1] - x[0]) + "px";
css.left = Math.round(x[0]) + "px";
css.top = Math.round(y[2]) + "px";
} else {
css.borderColor = "#FFFFFF transparent transparent transparent";
css.borderWidth = Math.round(y[2] - y[3]) + "px 0 0 " + Math.round(x[1] - x[0]) + "px";
css.left = Math.round(x[0]) + "px";
css.top = Math.round(y[3]) + "px";
}
/* ---- middle ---- */
css = this.o2.style;
css.left = Math.round(x[0]) + "px";
css.top = Math.round(Math.max(y[0], y[1])) + "px";
css.width = Math.round(x[1] - x[0]) + "px";
css.height = Math.round(Math.min(y[2], y[3]) - Math.max(y[0], y[1])) + "px";
css.background = "#FFFFFF";
}
/* ====== init script ====== */
var init = function () {
scr = document.getElementById("screen");
resize();
addEvent(window, 'resize', resize);
/* ---- mouse move event ---- */
addEvent(document, 'mousemove', function (e) {
if (window.event) e = window.event;
xm = e.clientX;
y0 = e.clientY;
xm = (nw - xm) * (250 / nw);
ym = (nh - y0) * (110 / nh);
});
/* ---- mouse wheel - camera z position ---- */
if (window.addEventListener) scr.addEventListener('DOMMouseScroll', function(e) {
if (e.preventDefault) e.preventDefault();
hm -= (e.detail * 10);
return false;
}, false);
scr.onmousewheel = function () {
hm += (event.wheelDelta * .25);
return false;
}
/* ---- create walls ---- */
oT.push(new Wall(
[-2.52,-2.52,-2.52,-2.52],
[-1,-1,1,1],
[-1,1,1,-1]
));
oT.push(new Wall(
[-2.5,2.5,2.5,-2.5],
[-1,-1,1,1],
[1,1,1,1]
));
oT.push(new Wall(
[2.52,2.52,2.52,2.52],
[-1,-1,1,1],
[1,-.5,-.5,1]
));
/* ---- create images ---- */
var i = 0, o;
var img = scr.getElementsByTagName("img");
while (o = img[i++]) pT.push(new Tab(o));
/* ---- start main loop ---- */
run();
}
/* ====== main loop ====== */
var run = function () {
/* ---- easing camera ---- */
camera.x += (xm - camera.x) / 10;
camera.y += (hm - camera.y) / 10;
camera.z += (ym - camera.z) / 10;
/* ---- walls ---- */
var i = 0, o;
while ( o = oT[i++] ) o.anim();
/* ---- images ---- */
var i = 0, o;
while ( o = pT[i++] ) o.anim();
setTimeout(run, 16);
}
return {
/* ====== initialize script ====== */
init : function () {
addEvent(window, 'load', function () {
init();
});
}
}
}();
/* ====== start ====== */
v3D.init();
</script>
</head>
<body>
<%String pic=request.getParameter("pic"); %>
<div id="screen" style="zoom:1">
<span><img src="images/pr04.jpg" alt="-2,-1,-.8,1.5,2"></span>
<span><img src="images/pr03.jpg" alt="-1,-.8,0,1.2,1.6"></span>
<a target="_blank" ><img src="imgs/Bpic/<%=pic%>" alt="-1.5,-.9,.8,3,1.8"></a>
<span><img src="images/pr01.jpg" alt="1,-.6,.2,1,.75"></span>
<span><img src="images/pr02.jpg" alt="-1.7,0,.4,1.4,1"></span>
<span><img src="images/pr07.jpg" alt=".5,-1,-.4,1.5,2"></span>
</div>
</body>
</html>