Как сэкономить на выключенных условиях при переключении на переменную - PullRequest
0 голосов
/ 14 марта 2020

Не уверен, что подобный вопрос задавался ранее. Если это так, пожалуйста, укажите это.

Конечно, я новичок в этой области. Поэтому, пожалуйста, потерпите меня.

У меня есть html веб-страница, содержащая 6 переключателей.

Мне нужно сохранять и отключать состояния этих переключателей в различные переменные.

on = 1 off = 0

Например, условия включения / выключения 1 представляют переменную x.

 when on x=1 off x=0

Условия включения / выключения 2 представляют переменную y.

 when on y=1 off y=0

моя страница выглядит следующим образом.

enter image description here

Мой код:

.switch {
  position: relative;
  display: inline-block;
  width: 60px;
  height: 34px;
}

.switch input {
  opacity: 0;
  width: 0;
  height: 0;
}

.slider {
  position: absolute;
  cursor: pointer;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background-color: #ccc;
  -webkit-transition: .4s;
  transition: .4s;
}

.slider:before {
  position: absolute;
  content: "";
  height: 26px;
  width: 26px;
  left: 4px;
  bottom: 4px;
  background-color: white;
  -webkit-transition: .4s;
  transition: .4s;
}

input:checked+.slider {
  background-color: #2196F3;
}

input:focus+.slider {
  box-shadow: 0 0 1px #2196F3;
}

input:checked+.slider:before {
  -webkit-transform: translateX(26px);
  -ms-transform: translateX(26px);
  transform: translateX(26px);
}


/* Rounded sliders
    .slider.round {
      border-radius: 34px;
    }
    
    .slider.round:before {
      border-radius: 50%;
    }
    */
<h2>Toggle Switch</h2>

<label name="s" class="switch">
    <input type="checkbox" checked>
    <span class="slider"></span>
</label><br><br>

<label class="switch">
    <input type="checkbox" checked>
    <span class="slider"></span>
</label><br><br>

<label class="switch">
    <input type="checkbox" checked>
    <span class="slider"></span>
</label><br><br>

<label class="switch">
    <input type="checkbox" checked>
    <span class="slider"></span>
</label><br><br>

<label class="switch">
    <input type="checkbox" checked>
    <span class="slider"></span>
</label><br><br>

<label class="switch">
    <input type="checkbox" checked>
    <span class="slider"></span>
</label><br><br>

<label class="switch">
    <input type="checkbox">
</label>

<label class="switch">
    <input type="checkbox" checked>
</label>

Может ли кто-нибудь помочь мне сохранить эти условия переключения в различные переменные? Я был бы очень признателен.

Спасибо, куча!

Ответы [ 2 ]

2 голосов
/ 14 марта 2020

Создайте функцию JavaScript для обработки смены переключателя:

<script type="text/JavaScript">
var switchValues = { };
function switched (switchElement) {
  switchValues[switchElement.id] = switchElement.checked;
}
</script>

Затем убедитесь, что каждый из ваших переключателей-флажков имеет уникальный атрибут id и обработчик onclick, назначенный для вашей новой функции:

<label name="s" class="switch">
      <input type="checkbox" id="switch1" onclick="switched(this)" checked>
      <span class="slider"></span>
    </label><br><br>

    <label class="switch">
      <input type="checkbox" id="switch2" onclick="switched(this)" checked>
      <span class="slider"></span>
    </label><br><br>

    <label class="switch">
      <input type="checkbox" id="switch3" onclick="switched(this)" checked>
      <span class="slider"></span>
    </label><br><br>

    <label class="switch">
      <input type="checkbox" id="switch4" onclick="switched(this)" checked>
      <span class="slider"></span>
    </label><br><br>

    Etc...
0 голосов
/ 14 марта 2020

Я добавил использование LocalStorage для сохранения позиций переключателей

значения находятся внутри switchList объект:

const switchList = 
      {​ switch_1: true
      ,​ switch_2: true
      ,​ switch_3: true ​
      , switch_4: true
      ,​ switch_5: true
      ,​ switch_6: true
      }

непосредственно из списка входных флажков

Вам также нужна форма!

, поэтому, когда элемент формы получает какое-либо изменение ввода, с помощью делегирования события вы можете установить значение флажка внутри switchList

, а затем SwitchList копируется в локальное хранилище

const switchersF  = document.querySelector('form#switchers')
  ,   memoSwitch = 'SwitchStorage'
  ,   switchList = [...switchers.querySelectorAll('input[type=checkbox]')].reduce((s,el)=>{ s[el.name]=true;return s},{})
  ;
initSwitchs()
  ;
switchersF.onsubmit=e=>e.preventDefault() // disable submit form
  ;
switchersF.oninput=e=>
  {
  if (!e.target.matches('input[type=checkbox]')) return
  switchList[e.target.name] = e.target.checked
  setSwitchsMemo()
  // console.log( switchList )
  }
function initSwitchs()
  {
  let SwitchsMemo = localStorage.getItem(memoSwitch)

  if (!SwitchsMemo)
    { setSwitchsMemo() }
  else
    {
    for (let [key, value] of Object.entries( JSON.parse(SwitchsMemo) ))
      {
      switchersF[key].checked = value
      }
    }
  }
function setSwitchsMemo()
  {
  localStorage.setItem(memoSwitch, JSON.stringify(switchList) )
  }
#switchers label {
  position: relative;
  display: block;
  float: left;
  clear: both;
  width: 60px;
  height: 34px;
  margin: .5em 1em;
  }
#switchers input {
  display: none;
  }
#switchers span {
  position: absolute;
  cursor: pointer;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background-color: #ccc;
  -webkit-transition: .4s;
  transition: .4s;
  }
#switchers span:before {
  position: absolute;
  content: "";
  height: 26px;
  width: 26px;
  left: 4px;
  bottom: 4px;
  background-color: white;
  -webkit-transition: .4s;
  transition: .4s;
  }
#switchers input:checked+span {
  background-color: #2196F3;
  }
#switchers input:checked+span:before {
  transform: translateX(26px);
  }
#switchers input:focus+span {
  box-shadow: 0 0 1px #2196F3;
  }
<h2>Toggle Switch</h2>

<form id="switchers">
  <label> <input type="checkbox" checked name="switch_1"> <span></span> </label>
  <label> <input type="checkbox" checked name="switch_2"> <span></span> </label>
  <label> <input type="checkbox" checked name="switch_3"> <span></span> </label>
  <label> <input type="checkbox" checked name="switch_4"> <span></span> </label>
  <label> <input type="checkbox" checked name="switch_5"> <span></span> </label>
  <label> <input type="checkbox" checked name="switch_6"> <span></span> </label>
</form>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...