Jquery — управление свойствами CSS элементов в соответствии со свойствами CSS других элементов

Как изменить свойства CSS элементов в соответствии со свойствами CSS других элементов? Например; Я хочу изменить положение «bigbutton» по умолчанию, если цвет «div1» черный. Это то, что я пробовал:

HTML

 <div> <div class = "div1"> </div>  <div class = "div2"></div> <div class = "div3"></div> <button type = "button" class = "bigbutton">bigbutton </button> </div> 

CSS

.div1{ position:fixed; left: 10px; width:100px; height: 100px; background-color: red; } .div2{ position:fixed; left: 10px; top: 110px; width:100px; height: 100px; background-color: green; } .div3{ position:fixed; left: 10px; top: 220px; width:100px; height: 100px; background-color: teal; .bigbutton{ position: fixed; left: 15px; width: 100px; height: 30px; background-color: blue; }

JQUERY

$(document).ready(function(){ $('.div1').mouseenter(function(){ $(this).css('background','black'); }); $('.div1').mouseleave(function(){ $(this).css('background',''); }); $('.div2').mouseenter(function(){ $('.div1').css('background','yellow'); }); $('.div2').mouseleave(function(){ $('.div1').css('background',''); }); $('.div3').mouseenter(function(){ $('.div1').css('background','black'); }); $('.div3').mouseleave(function(){ $('.div1').css('background',''); }); if ($('.div').css('background') == 'black'){ $('.bigbutton').css('left','200px'); } else{ $('.bigbutton').css('left','100px'); } });

Можно ли это сделать без if-else? PS: Приношу извинения за проблему с форматированием, так как почти невозможно правильно отформатировать на моем телефоне. Спасибо.

Почему бы вам не поместить эти другие свойства CSS в обработчики событий мыши? Обратите внимание, что переключение класса также может сделать это проще и использовать правила CSS, основанные на классе.

charlietfl 23.02.2019 19:23
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
1
80
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Когда вы говорите «изменить x на y», вы в основном описываете условное выражение if. Учитывая ваш пример, вы также можете получить желаемый результат, изменив положение кнопки в том же блоке кода, где div1 становится черным: https://codepen.io/pen/RvXQMP


Обновлять

Чтобы получить желаемый результат для любого ввода, который изменил бы цвет div1, вы можете использовать Наблюдатель мутаций, работает как eventListener для изменений DOM: https://codepen.io/pen/PVMVzw

Моя ошибка, я должен был быть более конкретным. Положение bigbutton не должно меняться при входе мыши в div1, а только когда цвет черный. Потому что, если мы добавим больше элементов, которые меняют цвет div1 на черный, большая кнопка должна изменить свое положение. Я отредактировал код, чтобы лучше объяснить сценарий.

x0_0x 23.02.2019 21:22

Обновленный ответ с решением для каждого изменения, из-за которого div1 имеет черный фон, надеюсь, это поможет.

Florea Ionut Micu 24.02.2019 09:07

Это то, чего я точно хотел. Спасибо.

x0_0x 25.02.2019 12:06

прежде всего вам нужно получить цвет bigbutton

var color = $('.bigbutton').css('color');

тогда проверь

if (color == "red"){ //example
 $('.div1').css('top':'10px') // finally do your changes [for example]
}

вы можете попробовать, html-код:

  <div id = "container">
   <div class = "div1"> </div>
   <div class = "div2"></div>
   <div class = "div3"></div> 
   <button type = "button" class = "bigbutton">bigbutton </button>
  </div> 

css-код:

.div1{ position:fixed; left: 10px; width:100px; height: 100px; background-color: red; }
.div2{ position:fixed; left: 10px; top: 110px; width:100px; height: 100px; background-color: green; }
.div3{ position:fixed; left: 10px; top: 220px; width:100px; height: 100px; background-color: teal;} 
.bigbutton{ position: fixed; left: 15px; width: 100px; height: 30px; background-color: blue; }

javascript-код:

container.onmouseover = container.onmouseout = handler;
function handler(event){
  if (event.type == 'mouseover') {
    if (event.target.className=='div1'){
       event.target.style.background = 'black';
       moveLeft();
    }
    if (event.target.className=='div2'){
      document.getElementsByClassName('div1')[0].style.background = 'yellow';
    }
    if (event.target.className=='div3'){
      document.getElementsByClassName('div1')[0].style.background = 'black';
       moveLeft();
    }
  }
  if (event.type == 'mouseout') {
    if (event.target.className=='div1'){
       event.target.style.background = '';
    }
    if (event.target.className=='div2'){
      document.getElementsByClassName('div1')[0].style.background = '';
    }
    if (event.target.className=='div3'){
      document.getElementsByClassName('div1')[0].style.background = '';
    }
    moveRight();
  }
}

function moveLeft(){
    $('.bigbutton').css('left','200px');
}
function moveRight(){
   $('.bigbutton').css('left','100px');
}

Здравствуйте, спасибо, что нашли время ответить. Этот метод работает очень хорошо, но он немного отличается от того, что я хотел.

x0_0x 25.02.2019 12:10

Другие вопросы по теме