Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 29.05.2018, 16:04
Аватар для madeas
Профессор
Отправить личное сообщение для madeas Посмотреть профиль Найти все сообщения от madeas
 
Регистрация: 13.04.2018
Сообщений: 232

Вывести числа в textarea
Здравствуйте!
Помогите, пожалуйста, исправить. В js не разбираюсь, но кое-что смог собрать...

Два вопроса:
1. можно ли сократить содержимое js?
2. как отобразить выбранные параметры в результатах textarea?

Рабочий пример:
https://jsfiddle.net/nqpc3m2u/22/
Ответить с цитированием
  #2 (permalink)  
Старый 29.05.2018, 17:40
Аватар для madeas
Профессор
Отправить личное сообщение для madeas Посмотреть профиль Найти все сообщения от madeas
 
Регистрация: 13.04.2018
Сообщений: 232

Немного улучшил https://jsfiddle.net/nqpc3m2u/29/
но все равно не выводит параметры в поле.
Ответить с цитированием
  #3 (permalink)  
Старый 29.05.2018, 18:30
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

shadow генератор
madeas,
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <style type="text/css">
        .flex-start {
    display: flex;
    flex-flow: row wrap;
    justify-content: flex-start;
  }

  input[type=range] {
    margin: 0;
    padding: 0;
    display: inline-block;
    -webkit-appearance: none;
    background: transparent;
    border: 1px solid #eee;
    height: 6px;
    margin-bottom: 15px;
  }

  input[type=range]:focus {
    outline: none;
  }

  input[type=range]::-webkit-slider-thumb {
    height: 20px;
    width: 10px;
    background: #47c9e5;
    cursor: pointer;
    z-index: 20;
    -webkit-appearance: none;
    position: relative;
  }

  .gen {
    display: inline-block;
    font-weight: bold;
    color: #47c9e5;
    min-width: 30px;
    text-align: center;
  }

  .op0 {
    opacity: 0;
  }

  .pl-20 {
    padding-left: 20px;
    min-width: 21%;
  }

  textarea.result {
    position: relative;
    display: block;
    border-color: #ccc;
    border-radius: 6px;
    min-width: 200px;
    font-family: inherit;
    font-size: 1rem;
    line-height: inherit;
    width: 100%;
    min-height: 205px;
    padding: 5px;
    height: auto;
  }

  </style>
  <title></title>
  <style type="text/css">
  th.c1 {height: 55px}
  </style>
</head>
<body>
  <div class="flex-start">
    <table>
      <thead>
        <tr>
          <th class="c1"></th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td>-100 <input multiple id="range_lr" type="range" min="-100" max="100" step="1" value=
          "18"> 100</td>
        </tr>
        <tr>
          <td>-100 <input multiple id="range_tb" type="range" min="-100" max="100" step="1" value=
          "18"> 100</td>
        </tr>
        <tr>
          <td><span class="op0">000</span>0 <input multiple id="range_sp" type="range" min="0" max=
          "100" step="1" value="51"> 100</td>
        </tr>
        <tr>
          <td><span class="op0">000</span>0 <input multiple id="range_bl" type="range" min="0" max=
          "100" step="1" value="24"> 100</td>
        </tr>
        <tr>
          <td><span class="op0">000</span>0 <input multiple id="range_op" type="range" min="0" max=
          "1" step="0.1" value="1"> 1</td>
        </tr>
        <tr>
          <td></td>
        </tr>
      </tbody>
    </table>
    <div class="pl-20">
      <h3>Result</h3>
      <p>Right / Left (<span class="gen" id="res1"></span>)</p>
      <p>Top / Bottom (<span class="gen" id="res2"></span>)</p>
      <p>Spread (<span class="gen" id="res3"></span>)</p>
      <p>Blur (<span class="gen" id="res4"></span>)</p>
      <p>Opacity (<span class="gen" id="res5"></span>)</p>
    </div>
    <div class="pl-20">
      <textarea class="result" id="result"></textarea>
    </div>
  </div><!-- flex-start -->
  <input type="range" class="color" min="0" max="255" value="200">R<br>
  <input type="range" class="color" min="0" max="255" value="200">G<br>
  <input type="range" class="color" min="0" max="255" value="200">B<br>
  <input type="range" class="color" min="0" max="1" step="0.1" value="1.0">A<br>
  <script>

  document.addEventListener('DOMContentLoaded', function() {
    var col = document.querySelectorAll('.color');
    var data = [];
    [].forEach.call(col, function(el, i) {
        data[i] = el.value;
        el.oninput = e => {
            data[i] = el.value;
            outData()
        }
    });
    var range = document.querySelectorAll('table [type="range"]'),
        gen = document.querySelectorAll('.gen');
    [].forEach.call(range, function(el, i) {
        gen[i].innerHTML = data[i + col.length] = el.value;
        el.oninput = e => {
            gen[i].innerHTML = el.value;
            data[i + col.length] = el.value;
            outData()
        }
    });

    function outData() {
        var color = `rgba(${data[0]}, ${data[1]}, ${data[2]}, ${data[3]})`,
            shadow = `${data[4]}px ${data[5]}px ${data[6]}px ${data[7]}px`,
            result = document.querySelector('.result');
            result.style.boxShadow = `${shadow} ${color}`;
            result.value = `box-shadow: ${shadow} \n${color}`;
    }
    outData()
  });
  </script>
</body>
</html>

Последний раз редактировалось рони, 29.05.2018 в 19:14.
Ответить с цитированием
  #4 (permalink)  
Старый 29.05.2018, 20:29
Аватар для madeas
Профессор
Отправить личное сообщение для madeas Посмотреть профиль Найти все сообщения от madeas
 
Регистрация: 13.04.2018
Сообщений: 232

рони,
идея была практически в этом, да, но не совсем. Я хотел попробовать прикрепить генератор к тому, то уже имею, но конструкция становится слишком сложной для меня.
В скрипте не хватает произвольного класса и строк -webkit-box-shadow и -moz-box-shadow. Их можно как-нибудь прикрепить?

И еще вопрос, связанный с тем что чуть выше. У меня есть в наличии 53 класса. Можно сделать так, чтобы скрипт сам создавал новый класс, т.е. таким образом:
.boxshadow-54 {
-webkit-box-shadow:;
-moz-box-shadow:;
box-shadow:;
}

или любой произвольный номер от 54 до 99?
Ответить с цитированием
  #5 (permalink)  
Старый 29.05.2018, 20:44
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

Сообщение от madeas
В скрипте не хватает произвольного класса и строк -webkit-box-shadow и -moz-box-shadow. Их можно как-нибудь прикрепить?
что мешает продолжить строку 153?
Сообщение от madeas
Можно сделать так, чтобы скрипт сам создавал новый класс, т.е. таким образом:
можно но алгоритм не достаточен, когда создать, какой номер сформировать
Ответить с цитированием
  #6 (permalink)  
Старый 29.05.2018, 20:55
Аватар для madeas
Профессор
Отправить личное сообщение для madeas Посмотреть профиль Найти все сообщения от madeas
 
Регистрация: 13.04.2018
Сообщений: 232

рони,
да, у меня пока знаний не хватает на все скобки и переносы строк. пока ищу решение в интернете. до сих пор удивлен, как вообще двигаюсь вперед. Без вас бы не справился.

создать класс можно по умолчанию, номер любой. Наверное, будет лучше, если я смогу сам задавать класс, генерируемый пользователями.
Вроде такого
result.value = '.bshadow-54'  + '{' +
				'-webkit-box-shadow:' + ${shadow} \n${color} + ';' +
				'-moz-box-shadow:' + ${shadow} \n${color} + ';' +
				'box-shadow:' + ${shadow} \n${color} + ';}';
			}
Ответить с цитированием
  #7 (permalink)  
Старый 29.05.2018, 21:10
Аватар для madeas
Профессор
Отправить личное сообщение для madeas Посмотреть профиль Найти все сообщения от madeas
 
Регистрация: 13.04.2018
Сообщений: 232

Настроил, спасибо.
result.value = '.bShadow-46{\n' + `-webkit-box-shadow: ${shadow} ${color}` + ';\n' + `-moz-box-shadow: ${shadow} ${color}` + ';\n' + `box-shadow: ${shadow} ${color}` + '}';
Ответить с цитированием
  #8 (permalink)  
Старый 29.05.2018, 21:17
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

madeas,
подобрать тень, для сохранения варианта, нажать "save"
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <style type="text/css">
                .flex-start {
        display: flex;
        flex-flow: row wrap;
        justify-content: flex-start;
    }

    input[type=range] {
        margin: 0;
        padding: 0;
        display: inline-block;
        -webkit-appearance: none;
        background: transparent;
        border: 1px solid #eee;
        height: 6px;
        margin-bottom: 15px;
    }

    input[type=range]:focus {
        outline: none;
    }

    input[type=range]::-webkit-slider-thumb {
        height: 20px;
        width: 10px;
        background: #47c9e5;
        cursor: pointer;
        z-index: 20;
        -webkit-appearance: none;
        position: relative;
    }

    .gen {
        display: inline-block;
        font-weight: bold;
        color: #47c9e5;
        min-width: 30px;
        text-align: center;
    }

    .op0 {
        opacity: 0;
    }

    .pl-20 {
        padding-left: 20px;
        min-width: 21%;
    }

    textarea.result {
        position: relative;
        display: block;
        border-color: #ccc;
        border-radius: 6px;
        min-width: 200px;
        font-family: inherit;
        font-size: 1rem;
        line-height: inherit;
        width: 100%;
        min-height: 205px;
        padding: 5px;
        height: auto;
    }

    th.c1 {height: 55px}
    </style>
    <title></title>
</head>
<body>
    <div class="flex-start">
        <table>
            <thead>
                <tr>
                    <th class="c1"></th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td>-100 <input multiple id="range_lr" type="range" min="-100" max="100" step="1" value=
                    "18"> 100</td>
                </tr>
                <tr>
                    <td>-100 <input multiple id="range_tb" type="range" min="-100" max="100" step="1" value=
                    "18"> 100</td>
                </tr>
                <tr>
                    <td><span class="op0">000</span>0 <input multiple id="range_sp" type="range" min="0" max=
                    "100" step="1" value="51"> 100</td>
                </tr>
                <tr>
                    <td><span class="op0">000</span>0 <input multiple id="range_bl" type="range" min="0" max=
                    "100" step="1" value="24"> 100</td>
                </tr>
                <tr>
                    <td><span class="op0">000</span>0 <input multiple id="range_op" type="range" min="0" max=
                    "1" step="0.1" value="1"> 1</td>
                </tr>
                <tr>
                    <td class="rt"></td>
                </tr>
            </tbody>
        </table>
        <div class="pl-20">
            <h3>Result</h3>
            <p>Right / Left (<span class="gen" id="res1"></span>)</p>
            <p>Top / Bottom (<span class="gen" id="res2"></span>)</p>
            <p>Spread (<span class="gen" id="res3"></span>)</p>
            <p>Blur (<span class="gen" id="res4"></span>)</p>
            <p>Opacity (<span class="gen" id="res5"></span>)</p>
        </div>
        <div class="pl-20">
            <textarea class="result" id="result"></textarea>

        </div>

    </div><!-- flex-start -->
    <input type="range" class="color" min="0" max="255" value="200">R<br>
    <input type="range" class="color" min="0" max="255" value="200">G<br>
    <input type="range" class="color" min="0" max="255" value="200">B<br>
    <input type="range" class="color" min="0" max="1" step="0.1" value="1.0">A<br>
    <button class="save">save</button>
    <script>

    document.addEventListener('DOMContentLoaded', function() {
    var col = document.querySelectorAll('.color');
    var data = [];
    [].forEach.call(col, function(el, i) {
        data[i] = el.value;
        el.oninput = e => {
            data[i] = el.value;
            outData()
        }
    });
    var range = document.querySelectorAll('table [type="range"]'),
        gen = document.querySelectorAll('.gen');
    [].forEach.call(range, function(el, i) {
        gen[i].innerHTML = data[i + col.length] = el.value;
        el.oninput = e => {
            gen[i].innerHTML = el.value;
            data[i + col.length] = el.value;
            outData()
        }
    });
    var out = [],
        n = 54,
        result = document.querySelector('.result'),
        test = "";

    function outData() {
        var color = `rgba(${data[0]}, ${data[1]}, ${data[2]}, ${data[3]})`,
            shadow = `${data[4]}px ${data[5]}px ${data[6]}px ${data[7]}px`;
        result.style.boxShadow = `${shadow} ${color}`;
        test = `.boxshadow-${n} {
-webkit-box-shadow: ${shadow} ${color};
-moz-box-shadow: ${shadow} ${color};
box-shadow:${shadow} ${color};
}
`;
        result.value = out.join("")+ test;
        result.scrollTop = result.scrollHeight;
    }
    outData()
    document.querySelector('.save').addEventListener('click',
        function() {
            if (test) {
                out.push(test);
                n++;
                test = "";
                result.scrollTop = result.scrollHeight;
            }
        })
});
    </script>
</body>
</html>

Последний раз редактировалось рони, 30.05.2018 в 10:09.
Ответить с цитированием
  #9 (permalink)  
Старый 30.05.2018, 10:14
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

madeas,
Opacity зачем?
Ответить с цитированием
  #10 (permalink)  
Старый 30.05.2018, 17:49
Аватар для madeas
Профессор
Отправить личное сообщение для madeas Посмотреть профиль Найти все сообщения от madeas
 
Регистрация: 13.04.2018
Сообщений: 232

рони,
оно уже не нужно) изначально это была альтернатива rgba, но позже в нем пропала необходимость. Получилось вот так вот. Думаю, будет полезная штука https://madeas.github.io/box-shadows#gen
Однако, есть сомнения в необходимости создания класса с числом.
Нужен взгляд со стороны.
Люди используют коллекцию + создают свои классы, но в случае, если коллекция увеличится, то классы будут сбиты... Как быть, пока не решил. Хотя, я сомневаюсь, что классов будет больше 60... иначе это будет хрень, а не коллекция. Так что, наверное, можно оставить генератор в том виде, в каком он есть.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Простые числа, не превосходящие заданного числа. jutochka123 Общие вопросы Javascript 2 30.09.2017 13:05
Из одного textarea в другой… Chile Events/DOM/Window 1 10.02.2016 09:16
Вопрос по textarea stivins Элементы интерфейса 3 05.11.2015 16:59
JS задача. Взаимно простые числа sashok Общие вопросы Javascript 5 23.11.2014 10:16
Разделить два числа и вывести на экран результат zilon Общие вопросы Javascript 0 15.10.2013 17:58