Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 27.09.2019, 20:36
Аватар для Блондинка
Профессор
Отправить личное сообщение для Блондинка Посмотреть профиль Найти все сообщения от Блондинка
 
Регистрация: 24.02.2019
Сообщений: 806

Доработать и исправить скрипт
Как изменить высоту двух элементов чтобы общая сумма значений высоты оставалась неизменной?
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="utf-8">
<title></title>
<style>
body { width: 760px; }
body, select, input { font: 14px serif; }
#calendar { width: 330px; height: 375px; display: inline-block; border: 1px solid #a9a9a9; border-radius: 6px/4px; padding: 5px; }
#navigation_panel { background: hsl(207, 100%, 92%); min-height: 34px; max-height: 78px; border: 1px solid #a9a9a9; border-radius: 6px/4px; padding: 10px; margin-bottom: 8px; text-align: center; vertical-align: middle;  display: -webkit-box; display: -webkit-flex; display: flex; -webkit-box-align: center; -webkit-align-items: center; align-items: center; -webkit-box-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-flex-wrap: wrap; flex-wrap: wrap; }
#navigation_panel button, #navigation_panel #calendar_year { background: hsl(207, 100%, 85%); color: hsl(207, 100%, 35%); font: 14px serif; border: 1px solid hsl(207, 100%, 35%); }
#calendar_month { background: transparent; color: hsl(207, 100%, 35%); font: 14px serif; border: 1px solid hsl(207, 100%, 35%); }
#navigation_panel button { height: 34px; vertical-align: middle; }
#background_month { background: hsl(207, 100%, 85%); display: inline-block; }
button.minus { width: 28px; text-align: center; border-radius: 12px 0 0 12px / 10px 0 0 10px; margin-right: -1px; }
button.plus { width: 28px; text-align: center; border-radius: 0 12px 12px 0 / 0 10px 10px 0; margin-left: -1px; }
.month_plus { margin-right: 35px; }
#presently { width: 288px; margin-top: 10px; border-radius: 12px/10px; -webkit-box-flex: 0; -webkit-flex: 0 0 288px; flex: 0 0 288px; }
#calendar_month { width: 89px; display: inline-block; }
#calendar_year { width: 54px; display: inline-block; }
select { height: 34px; }
input { height: 30px; border: 1px solid #a9a9a9; display: inline-block; text-align: center; }
#table { font: sans-serif; width: 100%; height: 311px; padding: 2px; }
#table, td { border: 1px solid #a9a9a9; border-radius: 6px/4px; }
td { margin: 1px; padding: 5px; text-align: center; }
.prevMonth { opacity: 0.5; }
.curMonth { background: #ff69b4; }
.nextMonth { opacity: 0.4; }
.nextMonth:nth-child(n + 6) { background: #ffebf5; }
.curDay { background: #fffacd; }
#presently.hide { display: none; }
.week-day { background: #c2d6ff; color: #0069ff; }
.week-day.curDay { border: 1px solid #285fcd; background: #6b9cff; color: #e6f5ff; font-weight: bold; }
.week-day:nth-child(n + 6) { background: #ffcae3; color: #ff0075; }
.week-day.curDay:nth-child(n + 6) { border: 1px solid #ff0075; background: #ff97c8; color: #fff8fc; text-shadow: 1px 1px #ff0075, 1px -1px #ff0075, -1px 1px #ff0075, -1px -1px #ff0075, 1px 0 #ff0075, -1px 0 #ff0075, 0 1px #ff0075, 0 -1px #ff0075; }
#table tbody td { background: #def1ff; color: #0091ff; }
#table tbody td:nth-child(n + 6) { background: #ffdced; color: #ff0075; }
#table tbody td.curMonth.curDay { background: #c2d6ff; border: 1px solid hsl(207, 100%, 35%); font-weight: bold; color: #fff; text-shadow: 1px 1px hsl(207, 100%, 35%), -1px 1px hsl(207, 100%, 35%), 1px -1px hsl(207, 100%, 35%), -1px -1px hsl(207, 100%, 35%), 1px 0 hsl(207, 100%, 35%), 0 1px hsl(207, 100%, 35%), -1px 0 hsl(207, 100%, 35%), 0 -1px hsl(207, 100%, 35%); }
#table tbody td.curMonth.curDay:nth-child(n + 6) { background: #ffbadb; border: 1px solid #ff0075; text-shadow: 1px 1px #ff0075, 1px -1px #ff0075, -1px 1px #ff0075, -1px -1px #ff0075, 1px 0 #ff0075, -1px 0 #ff0075, 0 1px #ff0075, 0 -1px #ff0075; }
</style>
</head>
<body>
<div id="calendar">
<div id="navigation_panel">
<button class="month_minus minus">‹</button>
<span id="background_month"><select id="calendar_month"></select></span>
<button class="month_plus plus">›</button>
<button class="year_minus minus">‹</button>
<input type="text" size="4" id="calendar_year" />
<button class="year_plus plus">›</button><br />
<button id="presently">сегодня</button>
</div>
<table id="table">
<thead>
<tr>
<td class="week-day">Пн.</td>
<td class="week-day">Вт.</td>
<td class="week-day">Ср.</td>
<td class="week-day">Чт.</td>
<td class="week-day">Пт.</td>
<td class="week-day">Сб.</td>
<td class="week-day">Вс.</td>
</tr>
</thead>
<tbody></tbody>
</table>
 <script>
Date.prototype.reduce = function(callback, value) {
 var year = this.getFullYear();
 var month = this.getMonth();
 var step = new Date(year, month, 1);
 var last = new Date(year, month + 1, 0);
 step.setHours(24 * (0 - ((step.getDay() + 6) % 7)));
 last.setHours(24 * (6 - ((last.getDay() + 6) % 7)));
 for (var i = 0; step <= last; i++) {
 value = callback(value, new Date(+step), i, this);
 step.setHours(24);
 }
 return value;
};
var data = new Date();
var selectMonth = document.querySelector('#calendar_month');
var monthNames = [
 'Январь',
 'Февраль',
 'Март',
 'Апрель',
 'Май',
 'Июнь',
 'Июль',
 'Август',
 'Сентябрь',
 'Октябрь',
 'Ноябрь',
 'Декабрь',
];
monthNames.forEach(function(monthName, i) {
 selectMonth.options[i] = new Option(monthName, i);
});
selectMonth.addEventListener('change', function() {
 data.setMonth(this.value);
 createCalendar(data);
});
var minusMonth = document.querySelector('.month_minus');
minusMonth.addEventListener('click', function() {
 data.setMonth(data.getMonth() - 1);
 createCalendar(data);
});
var plusMonth = document.querySelector('.month_plus');
plusMonth.addEventListener('click', function() {
 data.setMonth(data.getMonth() + 1);
 createCalendar(data);
});
var minusYear = document.querySelector('.year_minus');
minusYear.addEventListener('click', function() {
 data.setYear(data.getFullYear() - 1);
 createCalendar(data);
});
var plusYear = document.querySelector('.year_plus');
plusYear.addEventListener('click', function() {
 data.setYear(data.getFullYear() + 1);
 createCalendar(data);
});
var inputYear = document.querySelector('#calendar_year');
inputYear.addEventListener('input', function() {
 if (/^d{4}$/.test(this.value)) {
 data.setYear(this.value);
 createCalendar(data);
 }
});
var currentButton = document.querySelector('#presently');
currentButton.addEventListener('click', function() {
 data = new Date();
 createCalendar(data);
});
var daysTd = document.querySelectorAll('.week-day');
function createCalendar(data) {
 var now = new Date().setHours(0, 0, 0, 0);
 var year = data.getFullYear();
 inputYear.value = year;
 var month = data.getMonth();
 selectMonth.selectedIndex = month;
 currentButton.classList.remove('hide');
 var dayTd = document.querySelector('.week-day.curDay');
 if (dayTd) dayTd.classList.remove('curDay');
 var cls = ['prevMonth', 'curMonth', 'nextMonth'],
 indexCls = 0;
 var html = data.reduce(function(value, current, index, source) {
 var date = current.getDate();
 if (date == 1) indexCls++;
 var className = cls[indexCls];
 if (+now == +current && indexCls == 1) {
 className += ' curDay';
 currentButton.classList.add('hide');
 daysTd[index % 7].classList.add('curDay');
 }
 if (current.getDay() == 1) value += '<tr>';
 return value + '<td class="' + className + '">' + date;
 }, '');
 document.querySelector('#table tbody').innerHTML = html;
}
createCalendar(data);
var timer;
function refresh() {
 window.clearTimeout(timer);
 var finish = new Date().setHours(24, 0, 0, 0);
 finish -= data;
 timer = window.setTimeout(function() {
 createCalendar(data);
 refresh();
 }, finish);
}
refresh();
 </script>
 </body>
</html>
Ответить с цитированием
  #2 (permalink)  
Старый 27.09.2019, 20:45
Аватар для Блондинка
Профессор
Отправить личное сообщение для Блондинка Посмотреть профиль Найти все сообщения от Блондинка
 
Регистрация: 24.02.2019
Сообщений: 806

Надо чтобы высота блока navigatio_panel при текущем месяце была 34 а высота таблицы311, а при просмотре других месяцев высота блока 78 а высота таблицы 267 пикселей, как на js это реализовать?
Ответить с цитированием
  #3 (permalink)  
Старый 27.09.2019, 20:52
Аватар для Блондинка
Профессор
Отправить личное сообщение для Блондинка Посмотреть профиль Найти все сообщения от Блондинка
 
Регистрация: 24.02.2019
Сообщений: 806

рони,
почему нельзя указать фон/цвет/рамку для элементов с идами prevMonth и nextMonth, только opacity 0.4 ? Как это исправить?
Ответить с цитированием
  #4 (permalink)  
Старый 27.09.2019, 21:14
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

Сообщение от Блондинка
почему нельзя указать
вес селектора увеличьте.
#table tbody td.prevMonth
Ответить с цитированием
  #5 (permalink)  
Старый 27.09.2019, 21:19
Аватар для Блондинка
Профессор
Отправить личное сообщение для Блондинка Посмотреть профиль Найти все сообщения от Блондинка
 
Регистрация: 24.02.2019
Сообщений: 806

рони,

а возможно задать высоту панели и таблицы?
Ответить с цитированием
  #6 (permalink)  
Старый 27.09.2019, 21:47
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

Сообщение от Блондинка
а возможно задать высоту панели и таблицы?
строки 6 и 23 у вас не работают?
Сообщение от Блондинка
#calendar { width: 330px; height: 375px;
Сообщение от Блондинка
#table { font: sans-serif; width: 100%; height: 311px;
Ответить с цитированием
  #7 (permalink)  
Старый 27.09.2019, 21:56
Аватар для Блондинка
Профессор
Отправить личное сообщение для Блондинка Посмотреть профиль Найти все сообщения от Блондинка
 
Регистрация: 24.02.2019
Сообщений: 806

рони,

Сообщение от Блондинка Посмотреть сообщение
Надо чтобы высота блока navigatio_panel при текущем месяце была 34 а высота таблицы311, а при просмотре других месяцев высота блока 78 а высота таблицы 267 пикселей, как на js это реализовать?
Ответить с цитированием
  #8 (permalink)  
Старый 27.09.2019, 22:05
Аватар для Блондинка
Профессор
Отправить личное сообщение для Блондинка Посмотреть профиль Найти все сообщения от Блондинка
 
Регистрация: 24.02.2019
Сообщений: 806

рони,
Надо чтобы при появлении/исчезновении кнопки 'сегодня' таблица и панель меняли высоту, а высота всего календаря оставалась неизменной 375 пк
Ответить с цитированием
  #9 (permalink)  
Старый 27.09.2019, 22:16
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

Блондинка,
алгоритм
1. придумать название класса для текущего месяца
2. написать css, название класса название блока размеры.
3. заменить в строках 143 и 154 currentButton на div id="calendar" и hide на пункт 1.
4. исправить селектор в строке 31 см. пункт 1 .
всё!
Ответить с цитированием
  #10 (permalink)  
Старый 27.09.2019, 22:19
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

Сообщение от Блондинка
Надо чтобы при появлении/исчезновении кнопки 'сегодня' таблица и панель меняли высоту, а высота всего календаря оставалась неизменной 375 пк
это и так сейчас происходит, без всяких дополнительных изменений.
закройте тег в строке 67
</table>
</div>
<script>
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Доработать скрипт добавив функцию Блондинка Общие вопросы Javascript 5 28.08.2019 05:43
Не получается доработать скрипт калькулятора последнего дня отпуска insider999 Общие вопросы Javascript 15 22.07.2016 15:35
Помогите доработать скрипт Kalashmet Ваши сайты и скрипты 2 02.09.2013 19:50
Помогите исправить скрипт fAmOus Элементы интерфейса 4 31.08.2012 01:02
Помогите Исправить элементарный скрипт! с location.searсh pp-vp Events/DOM/Window 5 12.08.2010 14:40