Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Помогите советом! Как реализовать идею? (https://javascript.ru/forum/misc/35752-pomogite-sovetom-kak-realizovat-ideyu.html)

lazerru 21.02.2013 02:56

Помогите советом! Как реализовать идею?
 
Помогите советом! Представим что страница сайта поделена вертикально пополам: к примеру одна сторона зелёная, а другая красная. На обеих сторонах по кнопке, при нажатии на которые, пропорции сторон будут меняться. Если на зелёной стороне кнопка была нажата 200 раз, а на красной 800 раз, то соответственно зелёная область будет занимать 20% страницы, а красная - 80%. Желательно что-бы во время нажатия происходило изменение сторон, т.е. динамически.

У кого-то есть какие либо идеи как это можно реализовать?

Gvozd 21.02.2013 03:20

Если на красной стороне кнопка будет нажата раз, а на зеленой ни одного разу, то какая пропорция предполагается?
Какая формула зависимости размера частей от количества нажатий?

Deff 21.02.2013 03:43

<!DOCTYPE HTML>
<html>
  <head> 
<style>
* {
 margin:0;
 padding:0;
}
body {
  width:100%;
}
#green {
 display:inline-block;
 height:200px;
 width:50%;
 background-color:green;
}
#red {
 text-align:right;
 display:inline-block;
 height:200px;
 width:50%;
 background-color:red;
}
 </style>
    <script>
(function(){
var LeftClick=500;
var RightClick=500;
return attitude = function(a){
  if(!a){if(RightClick-1)LeftClick++;RightClick--;}
  if(a) {if(LeftClick-1) LeftClick--;RightClick++;}
  //alert(LeftClick+RightClick)
  var attLeft = (100*LeftClick/1000).toFixed(2)
  var attRight=100-attLeft
  document.getElementById('green').style.width=''+attLeft+'%';
  document.getElementById('red').style.width=''+attRight+'%';
}

})();
    </script>

  </head>
  <body>

<div id=green><input type=button value=" Жми " onclick="attitude(0)"></div><div id=red><input type=button value=" Жми " onclick="attitude(1)"></div>

  </body>
</html>

lazerru 21.02.2013 05:36

Спасибо большое :thanks: Хорошая реализация, все работает, но мне нужно что бы размер сторон определялся процентным соотношением левого и правого нажатий. К примеру кол-во нажатий левой кнопки это leftButton, а правой - rightButton; длина левой части(в процентах) это leftPercent, а правой - rightPercent.

Тогда:
Код:

leftPercent =  leftButton*100/(leftButton+rightButton);
rightPercent = 100-leftPercent;
или
rightPercent = rightButton*100/(leftButton+rightButton);

На счет пропорции 3:0, думаю пусть изначально будет 1:1.

Deff 21.02.2013 11:56

lazerru,
Оно вроде как в % добавил Вывод соотношений
<!DOCTYPE HTML>
<html>
  <head> 
<style>
* {
 margin:0;
 padding:0;
}
body {
  width:100%;
}
#green {
 display:inline-block;
 height:200px;
 width:50%;
 background-color:green;
}
#green span,#red  span{
 background-color:#fff;
 padding: 0 6px;
 border:1px #000 solid;
}
#red {
 text-align:right;
 display:inline-block;
 height:200px;
 width:50%;
 background-color:red;
}
 </style>
    <script>


(function(){
var LeftClick=500;
var RightClick=500;

Out=function (){
  var attLeft = (100*LeftClick/1000).toFixed(2)
  var attRight=(100-attLeft).toFixed(2)

  document.getElementById('Left').innerHTML=''+ attLeft +'%';
  document.getElementById('Right').innerHTML=''+ attRight +'%';
  document.getElementById('green').style.width=''+ attLeft +'%';
  document.getElementById('red').style.width=''+ attRight +'%';
}

return attitude = function(a){
  if(!a){if(RightClick-1)LeftClick++;RightClick--;}
  if(a) {if(LeftClick-1) LeftClick--;RightClick++;}
  Out ();
}

})();
window.onload = Out;
    </script>

  </head>
  <body>

<div id=green><span id="Left"></span> <input type=button value=" Жми " onclick="attitude(0)"></div><div id=red><span id="Right"></span> <input type=button value=" Жми " onclick="attitude(1)"></div>

  </body>
</html>

Deff 21.02.2013 12:03

Цитата:

Сообщение от lazerru
leftPercent = leftButton*100/(leftButton+rightButton);
rightPercent = 100-leftPercent;

В скрипте это соответствует
var attLeft = (100*LeftClick/1000).toFixed(2)
var attRight=(100-attLeft).toFixed(2)

ksa 21.02.2013 14:17

Предложу такой вариант...

<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<!--
<link rel="stylesheet" type="text/css" href="tmp.css" />
-->
<style type="text/css">
* {
 margin:0;
 padding:0;
}
body {
  width:100%;
}
#green {
	float:left;
	height:200px;
	width:50%;
	min-width: 5%;
	max-width: 95%;
	background-color:green;
}
#green span,#red  span{
 background-color:#fff;
 padding: 0 6px;
 border:1px #000 solid;
}
#red {
	float: right;
	text-align:right;
	height:200px;
	width:50%;
	min-width: 5%;
	max-width: 95%;
	background-color:red;
}
</style>
<script type="text/javascript">
(function(){
var AllClick=2;
var LeftClick=1;
var RightClick=1;

Out=function (){
  var attLeft = Math.floor(100*LeftClick/AllClick);
  var attRight=Math.floor(100*RightClick/AllClick)
  attLeft+=100-attLeft-attRight;

  document.getElementById('Left').innerHTML=''+ attLeft +'%';
  document.getElementById('Right').innerHTML=''+ attRight +'%';
  document.getElementById('green').style.width=''+ attLeft +'%';
  document.getElementById('red').style.width=''+ attRight +'%';
}

return attitude = function(a){
	AllClick++;
  if(!a) {LeftClick++;}
  if(a) {RightClick++;}
  Out ();
}

})();
window.onload = Out;
</script>
</head>
<body>
<div id=red>
	<span id="Right"></span> 
	<input type=button value=" Жми " onclick="attitude(1)" />
</div>
<div id=green>
	<span id="Left"></span> 
	<input type=button value=" Жми " onclick="attitude(0)" />
</div>
</body>
</html>

Deff 21.02.2013 16:23

ksa,
Из-за Math.floor(100*LeftClick/AllClick); под конец двигается не на каждый клик
Имхо (LeftClick/AllClick).toFixed(2) - ощутимей
(Проценты меняются в DOM с двумя знаками после запятой однозначно(а может и больше

ksa 21.02.2013 22:22

Цитата:

Сообщение от Deff
toFixed(2) - ощутимей

Согласен... :yes:
Просто решил посмотреть как будет смотреться с округлением.

lazerru 27.02.2013 15:52

Ребят, спасибо вам огроменное! Всё работает))


Часовой пояс GMT +3, время: 05:12.