PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : javascript: Spaltenbreite per Drag and Drop ändern


gentoo
2006-08-29, 13:55:30
Hi,

Kennt jemand von euch eine Möglichkeit wie ich mit Hilfe
von javascript die Spaltenbreite meiner Table per drag and drop
ändern kann ?

Es sollte so ähnlich funktionieren wie in Excel wo man die
Breite der Spalte ändert, wenn man am Rand des Spaltentitels
die Maus gedrückt hält und sie links-rechts verschiebt.

Ich hoffe ich konnte hiermit erklären was ich suche. :confused:

Gast
2006-08-29, 14:26:27
musst halt eine entsprechende stelle zum "ziehen" basteln (z.B. mit einem div) und da die mausevents mit javascript abfangen. dann auf die betroffene spalte per DOM zugreifen und die spaltenbreite passend zur mausbewegung ändern bis die maustaste wieder losgelassen wird.

ist nicht unbeding einfach zu realisieren und über den sinn lässt sich streiten, aber möglich ist es.

mithrandir
2006-08-29, 16:41:03
Ein Browser ist eigentlich keine Tabellenkalkulations-Emulation ; - ) Ich hab dir aber einmal eine Art Grundgerüst gebastelt, das sicher ausbaufähig ist. Beim MouseMove wird einfach ggf. die Breite neu ermittelt:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<meta name="description" content="Test">
<meta name="keywords" content="Test">
<meta name="author" content="mithrandir">
<meta name="publisher" content="mithrandir">
<meta name="generator" content="EditPlus">
<meta name="content-language" content="de">
<style type="text/css">
.splitter { background-color: #FF00FF; width: 2px; height: 100%; }
</style>
<script type="text/javascript">
var stat = 0;
var elem = null;
var posX = 0;
function handleMouseDown( elementId )
{
stat = 1;
elem = document.getElementById( elementId );
posX = 0;
}
function handleMouseUp()
{
stat = 0;
elem = null;
posX = 0;
}
function handleMouseMove( event )
{
try
{
if ( stat == 1 )
{
if ( posX != 0 )
{
var array = elem.style.width.split( "px" );
var elemWidth = array[0] - 0;

if ( posX > event.pageX )
{
elemWidth-=(posX-event.pageX);
posX = event.pageX;
}
else if ( event.pageX > posX )
{
elemWidth+=(event.pageX-posX);
posX = event.pageX;
}

elem.style.width = elemWidth+'px';
}
else
{
posX = event.pageX;
}
}
}
catch( error )
{
alert( error );
}
}
document.onmousemove = handleMouseMove;
document.onmouseup = handleMouseUp;
</script>
<title>Test</title>
</head>
<body>
<table border="0">
<th>
<td class="splitter" id="splitter1" rowspan="3"></td>
<td id="col1" style="width: 200px;">
A
</td>
<td class="splitter" id="splitter2" rowspan="3" onmousedown="handleMouseDown('col1');""></td>
<td id="col2" style="width: 200px;">
B
</td>
<td class="splitter" id="splitter3" rowspan="3" onmousedown="handleMouseDown('col2');"></td>
</th>
<tr>
<td>
1
</td>
<td>
Test A-1
</td>
<td>
Test B-1
</td>
</tr>
<tr>
<td>
2
</td>
<td>
Test A-2
</td>
<td>
Test B-2
</td>
</tr>
</table>
</body>
</html>
Getestet nur mit SeaMonkey v1.01, im IE gibt's noch Probleme.

gentoo
2006-08-29, 17:56:32
Danke vielmals!! :D
Werds morgen gleich ausprobieren, wenn ich wieder in der Firma bin.