02.05.2013, 17:01
|
Профессор
|
|
Регистрация: 02.04.2013
Сообщений: 225
|
|
10 плавающих уровней
Помогите сконструировать правильно страницу
Хочу сделать такое:
левый столбик - заполнен цветом градиентом а значения от 0 до 100
правый столбик - до 10 уровней выделения, изначально равен высоте левого столбика, если потянуть за границу - должен появиться второй уровень, третий и т.д. до 10, высота уровней может быть разной, но в сумме по высоте они должны быть равны левому. Минимальная высота 5% от высоты левого столбика
Приготовил такой скелет HTML:
jsfiddle.net
Кнопка адд - добавляет, делете - удаляет последний, клеар - удаляет все кроме первого, сет дефаулт - устанавливает по умолчанию 10 уровней, пытаюсь сделать чтоб ширина дива менялась от их количества - может посоветуете какой алгоритм а?
Последний раз редактировалось Kvark, 07.05.2013 в 20:49.
Причина: обновил
|
|
07.05.2013, 17:26
|
Профессор
|
|
Регистрация: 02.04.2013
Сообщений: 225
|
|
попытался изобразить попонятнее, может теперь появяться советчики?
|
|
07.05.2013, 18:13
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,120
|
|
Сообщение от Kvark
|
попытался изобразить попонятнее, может теперь появяться советчики?
|
может 2 картинки ? было, за чего то тянем??? стало ...
|
|
07.05.2013, 18:25
|
Профессор
|
|
Регистрация: 02.04.2013
Сообщений: 225
|
|
что касаеться тянем потянем, вроде UI с этим справиться, но принцып тот же, мне нужно чтобы бары заполняли всю высоту, но в тоже время их высота менялась, скажем если вся высота 100% и 2 бара - то 50% на 50% - потянув один в сторону другого - первый уменьшаеться на столькоже второй увеличиваеться - максимальное разрешоное сотношение в даном случае получиться 5% высоты бар 0, 95% высоты - бар 1, в идеале такое должно работать для всех 10 баров, но только за счет соседей - тоесть если мы имеем 5 баров то сжать - расширить можно только соседние бары а не все.
|
|
07.05.2013, 20:51
|
Профессор
|
|
Регистрация: 02.04.2013
Сообщений: 225
|
|
обновил еще раз фидлю:
http://jsfiddle.net/Kvark/xZKUU/14/embedded/result/
в статике - почти так как я и хотел, раздражает только маленький промежуток который появляеться при дробных процентах - как с таким бороться? И еще вылезла странность - в ИЕ (чтоб его...) как то неправильно считаеться высота дива - с чем это связано и как побороть может подскажете?
|
|
07.05.2013, 22:14
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,120
|
|
Kvark,
размышления на тему ))) ...
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title> - jsFiddle demo by Kvark</title>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<link rel="stylesheet" type="text/css" href="/css/result-light.css">
<style type='text/css'>html,body{margin:0;padding:0;height:100%}
body{font:76% arial,sans-serif}
p{margin:0 10px 10px}
a{display:block;color:#981793;padding:10px}
div#header h1{height:80px;line-height:80px;margin:0;padding-left:10px;background:#EEE;color:#79B30B}
div#range0{background:#CD0A31;height:100%;width:600px;border-top:2px #000000 groove;border-bottom:2px #000000 groove;margin:0px 0px 0px 0px;padding:0px 0px 0px 0px;display:table}
div#range1{background:#F43445;height:100%;width:600px;border-top:2px #000000 groove;border-bottom:2px #000000 groove;margin:0px 0px 0px 0px;padding:0px 0px 0px 0px;display:table}
div#range2{background:#F44C34;height:100%;width:600px;border-top:2px #000000 groove;border-bottom:2px #000000 groove;margin:0px 0px 0px 0px;padding:0px 0px 0px 0px;display:table}
div#range3{background:#F47634;height:100%;width:600px;border-top:2px #000000 groove;border-bottom:2px #000000 groove;margin:0px 0px 0px 0px;padding:0px 0px 0px 0px;display:table}
div#range4{background:#F49C34;height:100%;width:600px;border-top:2px #000000 groove;border-bottom:2px #000000 groove;margin:0px 0px 0px 0px;padding:0px 0px 0px 0px;display:table}
div#range5{background:#F4C934;height:10%;width:600px;border-top:2px #000000 groove;border-bottom:2px #000000 groove;margin:0px 0px 0px 0px;padding:0px 0px 0px 0px;display:table}
div#range6{background:#F4F434;height:100%;width:600px;border-top:2px #000000 groove;border-bottom:2px #000000 groove;margin:0px 0px 0px 0px;padding:0px 0px 0px 0px;display:table}
div#range7{background:#D5F434;height:100%;width:600px;border-top:2px #000000 groove;border-bottom:2px #000000 groove;margin:0px 0px 0px 0px;padding:0px 0px 0px 0px;display:table}
div#range8{background:#AEF434;height:100%;width:600px;border-top:2px #000000 groove;border-bottom:2px #000000 groove;margin:0px 0px 0px 0px;padding:0px 0px 0px 0px;display:table}
div#range9{background:#5BBE3C;height:100%;width:600px;border-top:2px #000000 groove;border-bottom:2px #000000 groove;margin:0px 0px 0px 0px;padding:0px 0px 0px 0px;display:table}
div.range{display:table-cell;vertical-align:middle}
div.ranges p{line-height:1.4}
div#footer{background:#333;color:#FFF}
div#footer p{margin:0;padding:5px 10px}
div#wrapper{float:left;width:600px;height:500px;margin:0px 0px 0px 0px;padding:0px 0px 0px 0px;}
div#rangbar{float:left;width:80px;height:500px;background:#B9CAFF;font:bold 100% arial,sans-serif}
div#controls{background:#FF8539;float: right;width:100%}
</style>
<script type='text/javascript'>
$(window).load(function(){
$(document).ready(function()
{
var RangesColors = ["#CD0A31", "#F43445", "#F44C34", "#F47634", "#F49C34", "#F4C934", "#F4F434", "#D5F434", "#AEF434", "#5BBE3C"];
var num = $('#wrapper').size() - 1;
var wrapper = $("#wrapper");
//alert("nr.: " + num);
$('#add').click(function()
{
if (num > 9)
{
num = 10;
}
else
{
if (num != 10)
{
wrapper.append('<div id="range' + num + '">' + num + '</div>').appendTo('.wrapper');
num++;
$("[id ^= range]").css({"height": ((500-500%num)/num)-4+"px"});
if(500%num)$("[id ^= range]").last().css({"height": 500%num +((500-500%num)/num)-4+"px"});
// alert(num);
}
};
});
$('#cls').click(function()
{
if(num > 1)
{
do
{
num--;
$('#range' + num + ':last').remove();
}
while (num > 1);
}
$("[id ^= range]").css({"height": "496px"})
});
$('#del').click(function()
{
if (num > 1)
{
$("[id ^= range]").last().remove();
num--;
$("[id ^= range]").css({"height": ((500-500%num)/num)-4+"px"});
if(500%num)$("[id ^= range]").last().css({"height": 500%num +((500-500%num)/num)-4+"px"});
}
});
$('#set').click(function()
{
if (num > 1)
{
do
{
num--;
$('#range' + num + ':last').remove();
}
while (num > 1);
};
do
{
wrapper.append('<div id="range' + num + '">' + num + '</div>').appendTo('.wrapper');
num++;
}
while (num < 10);
$("[id ^= range]").css({"height": ((500-500%num)/num)-4+"px"});
});
});
})
</script>
</head>
<body>
<div id="container">
<div id="header">
<h1>
Range Definition
</h1>
</div>
<form>
<div id="wrapper">
</div>
</form>
<div id="rangbar">
<p> - [100 %] -</p>
<p> - [ 90 %] -</p>
<p> - [ 80 %] -</p>
<p> - [ 70 %] -</p>
<p> - [ 60 %] -</p>
<p> - [ 50 %] -</p>
<p> - [ 40 %] -</p>
<p> - [ 30 %] -</p>
<p> - [ 20 %] -</p>
<p> - [ 10 %] -</p>
<p> - [ 0 %] -</p>
</div>
<div id="controls">
<p><input id="cls" name="cls" type="button" value="Clear all"><input id="add" name="add" type="button" value="Add range"><input id="del" name="del" type="button" value="Delete range"><input id="set" name="set" type="button" value="Set default"></p>
</div>
<div id="footer">
</div>
</div>
</body>
</html>
Последний раз редактировалось рони, 07.05.2013 в 22:31.
|
|
08.05.2013, 13:03
|
Профессор
|
|
Регистрация: 02.04.2013
Сообщений: 225
|
|
спасибо за вставку, я пока так и не понял как вставлять такое типа "запустить"
div#range5{background:#F4C934;height:10%; < очепятка =)
и wrapper.append('<div id="range' + num + '">' + num + '</div>').appendTo('.wrapper');
.appendTo('.wrapper') ненужен
это я не чтоб придраться, а для тех кто может тоже будет искать как да что
Последний раз редактировалось Kvark, 08.05.2013 в 14:14.
|
|
08.05.2013, 15:58
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,120
|
|
Сообщение от Kvark
|
я пока так и не понял как вставлять такое типа "запустить"
|
--- run в теге html---кнопка <>
Пожалуйста, отформатируйте свой код!
Для этого его можно заключить в специальные теги: js/css/html и т.п., например:
[js]
... ваш код...
[/js]
О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.
|
|
08.05.2013, 16:09
|
Профессор
|
|
Регистрация: 02.04.2013
Сообщений: 225
|
|
Cпасибо! Научился, почти вот только с размерами фрэйма что то нелады... если указываю ширину - получаю мелкий четырех угольник...
На текущий момент такое:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head profile="http://gmpg.org/xfn/11">
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE8">
<meta http-equiv="X-UA-Compatible" content="IE=7,IE=9" >
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="robots" content="noindex,nofollow,noodp,noydir,noarchive,nosnippet"/>
<base target="_parent">
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>
<title>
Ranges
</title>
<style type="text/css">
html, body
{
margin: 0;
padding: 0;
height: 100%;
}
body
{
font: 76% arial,sans-serif;
}
p
{
margin: 0px 5px 5px 0px;
line-height:1.7;
}
a
{
display:block;
color: #981793;
padding:10px;
}
div#header
{
width: 720px;
}
div#header h1
{
height:80px;
line-height:80px;
margin:0;
padding-left:10px;
background: #EEE;
color: #2540D0
}
div#range0
{
width: 650px;
border-top: 2px #000000 groove;
border-bottom: 2px #000000 groove;
margin: 0px 0px 0px 0px;
padding: 0px 0px 0px 0px;
display: table;
}
div#range1
{
width: 650px;
border-top: 2px #000000 groove;
border-bottom: 2px #000000 groove;
margin: 0px 0px 0px 0px;
padding: 0px 0px 0px 0px;
display: table;
}
div#range2
{
width: 650px;
border-top: 2px #000000 groove;
border-bottom: 2px #000000 groove;
margin: 0px 0px 0px 0px;
padding: 0px 0px 0px 0px;
display: table;
}
div#range3
{
width: 650px;
border-top: 2px #000000 groove;
border-bottom: 2px #000000 groove;
margin: 0px 0px 0px 0px;
padding: 0px 0px 0px 0px;
display: table;
}
div#range4
{
width: 650px;
border-top: 2px #000000 groove;
border-bottom: 2px #000000 groove;
margin: 0px 0px 0px 0px;
padding: 0px 0px 0px 0px;
display: table;
}
div#range5
{
width: 650px;
border-top: 2px #000000 groove;
border-bottom: 2px #000000 groove;
margin: 0px 0px 0px 0px;
padding: 0px 0px 0px 0px;
display: table;
}
div#range6
{
width: 650px;
border-top: 2px #000000 groove;
border-bottom: 2px #000000 groove;
margin: 0px 0px 0px 0px;
padding: 0px 0px 0px 0px;
display: table;
}
div#range7
{
width: 650px;
border-top: 2px #000000 groove;
border-bottom: 2px #000000 groove;
margin: 0px 0px 0px 0px;
padding: 0px 0px 0px 0px;
display: table;
}
div#range8
{
width: 650px;
border-top: 2px #000000 groove;
border-bottom: 2px #000000 groove;
margin: 0px 0px 0px 0px;
padding: 0px 0px 0px 0px;
display: table;
}
div#range9
{
width: 650px;
border-top: 2px #000000 groove;
border-bottom: 2px #000000 groove;
margin: 0px 0px 0px 0px;
padding: 0px 0px 0px 0px;
display: table;
}
div.range
{
display: table-cell;
vertical-align: middle;
}
div#footer
{
background: #333;
color: #FFF;
}
div#footer p
{
margin: 0;
padding: 5px 10px;
}
div#wrapper
{
float: left;
width: 650px;
height: 490px;
margin: 14px 0px 0px 14px;
padding: 0px 0px 0px 0px;
}
div#rangs
{
float: left;
background: #B9CAFF;
height: 530px;
}
div#rangsbar
{
display: table;
float: left;
width: 56px;
height: 530px;
background: #B9CAFF;
font: bold 100% arial,sans-serif
}
div#controls
{
display: table;
float: left;
clear:both;
background: #FF8539;
height: 30px;
width: 710px;
margin: 0px 0px 0px 0px;
padding: 0px 0px 0px 10px;
}
</style>
<script type='text/javascript'>
$(window).load(function()
{
$(document).ready(function()
{
var RangesColors = ["#CD0A31", "#F43445", "#F44C34", "#F47634", "#F49C34", "#F4C934", "#F4F434", "#D5F434", "#AEF434", "#5BBE3C"];
var RangesNames = ["Range A", "Range B", "Range C", "Range D", "Range E", "Range F", "Range G", "Range H", "Range J", "Range I"];
var RangesBorders = ["90-100", "80-90", "70-80", "60-70", "50-60", "40-50", "30-20", "20-10", "10-20", "0-10"];
var num = $('#wrapper').size() - 1;
var wrapper = $("#wrapper");
$('#add').click(function()
{
if (num > 9)
{
num = 10;
}
else
{
if (num != 10)
{
wrapper.append('<div id="range' + num + '"><div class="range"> ' + num + '<b> Color: </b><input type="text" name="bar' + num + '" class="field" value="' + RangesColors[num] + '" maxlength="7" align="middle" style="width: 60px;"><b> Name: </b><input type="text" name="barname' + num + '" class="field" value="' + RangesNames[num] + '" style="width: 300px;"><b> % Borders: </b><input type="text" name="border' + num + '" class="field" value="' + RangesBorders[num] + '" style="width: 42px;"></div></div>');
$('#range'+ num).css({ "background": RangesColors[num] });
num++;
$("[id ^= range]").css({"height": ((500-500%num)/num)-4+"px"});
if(500%num)$("[id ^= range]").last().css({"height": 500%num +((500-500%num)/num)-4+"px"});
// alert(num);
}
};
});
$('#cls').click(function()
{
if(num > 1)
{
do
{
num--;
$('#range' + num + ':last').remove();
}
while (num > 1);
}
$("[id ^= range]").css({"height": "496px"})
});
$('#del').click(function()
{
if (num > 1)
{
$("[id ^= range]").last().remove();
num--;
$("[id ^= range]").css({"height": ((500-500%num)/num)-4+"px"});
if(500%num)$("[id ^= range]").last().css({"height": 500%num +((500-500%num)/num)-4+"px"});
}
});
$('#set').click(function()
{
if (num > 1)
{
do
{
num--;
$('#range' + num + ':last').remove();
}
while (num > 1);
};
do
{
wrapper.append('<div id="range' + num + '"><div class="range"> ' + num + '<b> Color: </b><input type="text" name="bar' + num + '" class="field" value="' + RangesColors[num] + '" maxlength="7" align="middle" style="width: 60px;"><b> Name: </b><input type="text" name="barname' + num + '" class="field" value="' + RangesNames[num] + '" style="width: 300px;"><b> % Borders: </b><input type="text" name="border' + num + '" class="field" value="' + RangesBorders[num] + '" style="width: 42px;"></div></div>');
$('#range'+ num).css({ "background": RangesColors[num] });
num++;
}
while (num < 10);
$("[id ^= range]").css({"height": ((500-500%num)/num)-4+"px"});
});
});
});
</script>
</head>
<body>
<div id="header">
<h1>
Range Definition
</h1>
</div>
<div id="container">
<form>
<div id="rangs">
<div id="wrapper">
</div>
</div>
</form>
<div id="rangsbar">
<div class="range">
<p> - [100 %]</p>
<p>-</p>
<p> - [ 90 %]</p>
<p>-</p>
<p> - [ 80 %]</p>
<p>-</p>
<p> - [ 70 %]</p>
<p>-</p>
<p> - [ 60 %]</p>
<p>-</p>
<p> - [ 50 %]</p>
<p>-</p>
<p> - [ 40 %]</p>
<p>-</p>
<p> - [ 30 %]</p>
<p>-</p>
<p> - [ 20 %]</p>
<p>-</p>
<p> - [ 10 %]</p>
<p>-</p>
<p> - [ 0 %]</p>
</div>
</div>
</div>
<div id="controls">
<div class="range">
<input id="cls" name="cls" type="button" value="Clear all"><input id="add" name="add" type="button" value="Add range"><input id="del" name="del" type="button" value="Delete range"><input id="set" name="set" type="button" value="Set default">
</div>
</div>
</body>
</html>
Я почти завершил что хотелось получить!
Последние штрихи остались:
- никак не придумаю как сделать чтобы ширина регионов менялась в зависимости указаных пределов (от драг дропа пока решил отказаться - не работает, или не сумел настроить правильно )
- сделать смену цвета для дива в зависимости указаного в ячейке кода как только будет кликнуто из нее - подскажите как это "заметить"?
Последний раз редактировалось Kvark, 08.05.2013 в 16:46.
|
|
|
|