javascript - 没有用js刷新悬停
问题描述
我的网站上有颜色切换器。我是 js 和 jquery 的新手,但我编写了它的代码。简单地说,它会更改 css 信息以更改颜色和背景颜色及其悬停。
但是我的颜色切换器在第一次更改后不会更改悬停颜色。
所以,如果你注意到下面的 youtube 视频(屏幕截图),在第一次滑动后,棕色不再出现。棕色属性消失了。
您可以在我的网站上查看或工作:
https://resimli.yedek.deniz-tasarim.site/-
这是 YouTube 视频:
https://www.youtube.com/watch?v=C0wkBpgMNjo&feature=youtu.be
我该如何解决?
这是所有的js代码:
jQuery(document).ready(function($) {
"use strict"
document.querySelectorAll('*').forEach(function(node) {
const style = window.getComputedStyle(node);
const color = style.getPropertyValue('color');
const Bcolor = style.getPropertyValue('background-color');
if (color === 'rgb(22, 160, 133)') {
$("ul.colors .color1").on('click', function() {
node.style.setProperty("color", "red", "important");
var colorv = 'orange';
var style = document.createElement('style');
style.type = 'text/css';
style.innerHTML = '.cssClass:hover { background-color: cyan!important ; } .colorful-buton-class:hover { background-color: cyan!important ; } .title-bottom:before {background-color: red!important; } .mt-separator::before, .mt-separator:before, .mt-separator::after {background-color: red!important; } .ulockd-btn-thm2:hover { background-color:cyan!important; } .ulockd-btn-thm2 { background-color:brown!important; } .wpforms-form button[type=submit]:hover { background-color:cyan!important; } .elementor-icon, .elementor-heading-title { color:red!important; } ';
document.getElementsByTagName('head')[0].appendChild(style);
document.querySelectorAll(".ulockd-btn-white").forEach(function(node) {
node.classList.add("cssClass");
});
return false;
});
$("ul.colors .color2").on('click', function() {
node.style.setProperty("color", "pink", "important");
var colorv = 'orange';
var style = document.createElement('style');
style.type = 'text/css';
style.innerHTML = '.cssClass:hover { background-color: orange!important ; } .colorful-buton-class:hover { background-color: orange!important ; } .title-bottom:before {background-color: red!important; } .mt-separator::before, .mt-separator:before, .mt-separator::after {background-color: red!important; } .ulockd-btn-thm2:hover { background-color:orange!important; } .wpforms-form button[type=submit]:hover { background-color:orange!important; } .elementor-icon, .elementor-heading-title { color:red!important; } ';
document.getElementsByTagName('head')[0].appendChild(style);
document.querySelectorAll(".ulockd-btn-white").forEach(function(node) {
node.classList.add("cssClass");
});
return false;
});
}
if (Bcolor === 'rgb(22, 160, 133)') {
$("ul.colors .color1").on('click', function() {
node.style.setProperty("background-color", "red", "important");
document.querySelector(".ulockd-btn-white").classList.add("mystyle");
var style = document.createElement('style');
style.type = 'text/css';
style.innerHTML = '.cssClass:hover { background-color: cyan!important ; } .colorful-buton-class:hover { background-color: cyan!important ; } .colorful-buton-class > * > * > [role=button] { background-color: cyan!important ; } .wpforms-form button[type=submit]:hover { background-color:cyan!important; } ';
document.getElementsByTagName('head')[0].appendChild(style);
return false;
});
$("ul.colors .color2").on('click', function() {
node.style.setProperty("background-color", "pink", "important");
document.querySelector(".ulockd-btn-white").classList.add("mystyle");
var style = document.createElement('style');
style.type = 'text/css';
style.innerHTML = '.cssClass:hover { background-color: orange!important ; } .colorful-buton-class:hover { background-color: orange!important ; } .colorful-buton-class > * > * > [role=button] { background-color: orange!important ; } .wpforms-form button[type=submit]:hover { background-color:orange!important; } ';
document.getElementsByTagName('head')[0].appendChild(style);
return false;
});
}
});
$("#color-style-switcher .bottom a.settings").on('click', function(e) {
e.preventDefault();
var div = $("#color-style-switcher");
if (div.css("left") === "-195px") {
$("#color-style-switcher").animate({
left: "0px"
});
} else {
$("#color-style-switcher").animate({
left: "-195px"
});
}
});
$("ul.colors li a").on('click', function(e) {
e.preventDefault();
$(this).parent().parent().find("a").removeClass("active");
$(this).addClass("active");
})
});
jQuery('head').append('<link rel="stylesheet" id="colors" href="http://hekim.deniz-tasarim.site/wp-content/plugins/Hekim/widgets/css/colors/default.css" type="text/css" />');
jQuery('head').append('<link rel="stylesheet" href="http://hekim.deniz-tasarim.site/wp-content/plugins/Hekim/widgets/css/color-switcher.css" type="text/css" />');
解决方案
首先,您forEach
对文档中的所有元素执行 a(由 选择document.querySelectorAll('*')
)。在那里,您在由常见查询选择的元素上分配事件侦听器,$("ul.colors .color1")
并且$("ul.colors .color2")
(仅当它们的计算样式满足某些条件时)。这样,每次用户点击任何$("ul.colors .color1")
元素时,都会为第一个查询中找到的每个元素执行一次事件侦听器回调document.querySelectorAll('*')
。你可能不想要那个。
我假设您希望页面中与某些计算样式匹配的所有元素在颜色选择器更改其值时发生更改。
首先:一旦你改变颜色,计算出来的颜色就会不同,所以条件匹配器会改变(不再匹配)。所以你想要下一个:
- 保存/缓存受影响的元素(更高效且不易出错)
- 自动更改与当前选择的颜色的匹配条件
然后,此代码可能会对此有所帮助:
const colorMatchedElements = [...(document.querySelectorAll('*'))]
.filter(function(node) {
const style = window.getComputedStyle(node);
const color = style.getPropertyValue('color');
return color === 'rgb(22, 160, 133)'
});
const BcolorMatchedElements = [...(document.querySelectorAll('*'))]
.filter(function(node) {
const style = window.getComputedStyle(node);
const Bcolor = style.getPropertyValue('background-color');
return Bcolor === 'rgb(22, 160, 133)'
});
$("ul.colors .color1").on('click', function() {
colorMatchedElements.forEach( node => node.style.setProperty("color", "red", "important") );
BcolorMatchedElements.forEach( node => node.style.setProperty("background-color", "red", "important") );
// ...
return false;
});
$("ul.colors .color2").on('click', function() {
colorMatchedElements.forEach( node => node.style.setProperty("color", "pink", "important") );
BcolorMatchedElements.forEach( node => node.style.setProperty("background-color", "pink", "important") );
// ...
return false;
});
您甚至可以改进此代码,例如抽象所有颜色的点击事件,以便它从点击事件中获取选定的值(例如)。
编辑
修复了一个错误:querySelector
返回值是一种NodeList
类型。您需要将其转换为Array
能够filter
在其上使用的。
推荐阅读
- javascript - 如何在 Vuejs 中通过 Axios 从传递的数据中处理相关数据库
- mule - 一个转换处理器可以同时运行多少个 .dwl 文件中的 dataweave 脚本?
- javascript - 解构和重命名属性
- java - 为什么使用 Jersey 客户端在 POST 调用中出现 400 错误代码
- javascript - 单击功能在 JavaScript 控制台中不起作用?
- php - 店面产品页面获取产品摘要加上右浮动以匹配图像对齐
- python - 我如何在没有标签的数据中使用 keras 层神经网络?(只有一些输入,没有标签)
- mysql - (1045,“用户访问被拒绝)
- arrays - 改进和美化 Typescript 数组属性聚合代码片段
- javascript - 如何从箭头函数返回值?