javascript - JQuery 无法为主题定制器正确切换类
问题描述
我有 3 个 css 主题,每个都将页面更改为指定的主题。前 2 个是预设类,在它们之间切换时它们工作正常。第三个是一个自定义主题,它接受用户的选择并创建它。
第三个主题产生了 3 个问题:
- 我必须单击提交按钮两次才能使主题真正生效。
- 应用自定义主题后,我无法真正切换回其他 2 个主题中的任何一个。但是,我可以不断更改第三个主题的值并应用它们(单击两次后)
- 悬停属性已损坏,一旦元素悬停在其上,它就不会返回其正常形式
这是jquery代码:
$(document).ready(function(){
$("#b1").click(function(){
$("body").removeClass("body2 body3").addClass("body1");
$(".themes").removeClass("theme2 theme3").addClass("theme1");
$(".txts").removeClass("txt2 txt3").addClass("txt1");
})
$("#b2").click(function(){
$("body").removeClass("body1 body2").addClass("body2");
$(".themes").removeClass("theme1 theme3").addClass("theme2");
$(".txts").removeClass("txt1 txt3").addClass("txt2");
})
var vBack
var vColor
var cFont
var cBack;
var cColor;
$("#b3").click(function(){
vBack= $("#op1").val();
vColor= $("#op2").val();
cFont= $("#op3").val();
switch(vBack) {
case('blue'):
cBack= "rgb(80, 160, 200)";
break;
case('red'):
cBack= "rgb(250, 70, 70)";
break;
case('yellow'):
cBack= "rgb(250, 250, 130)";
break;
}
switch(vColor) {
case('purple'):
cColor= "rgb(120, 10, 150)";
break;
case('orange'):
cColor= "rgb(250, 180, 50)";
break;
case('turquoise'):
cColor= "rgb(0, 250, 250)";
break;
}
$(".body3").css({"background": cBack, "color": cColor});
$(".theme3").css({"border": 0, "outline": 0, "background": cColor, "color": cBack, "font-family": cFont});
$(".theme3").hover(function() {
$(this).css({"background": cBack, "color": cColor, "font-family": cFont, "box-shadow": "0 0 0 2px " +cColor});
});
$(".txt3").css({"color": cColor, "font-family": cFont});
$("body").removeClass("body1 body2").addClass("body3");
$(".themes").removeClass("theme1 theme2").addClass("theme3");
$(".txts").removeClass("txt1 txt2").addClass("txt3");
})
})
您可以通过codepen的链接测试上述问题并阅读完整代码
编辑:修复了悬停问题
解决方案
修复了 3 个问题中的 2 个。
首先是悬停问题,您必须在 .hover 原型中添加 2 个函数。一个具有悬停的 css 属性,另一个包含其原始属性。
这是代码:
$(".theme3").css({"box-shadow": "none", "border": "0", "outline": "0", "background": cColor, "color": cBack, "font-family": cFont});
$(".theme3").hover(function() {
$(this).css({"background": cBack, "color": cColor, "font-family": cFont, "box-shadow": "0 0 0 2px " +cColor})
}, function() {
$(this).css({"box-shadow": "none", "border": "0", "outline": "0", "background": cColor, "color": cBack, "font-family": cFont})
});
通过将“!important”添加到预设css类的所有属性来解决第二个问题,以便我可以切换回它们。感谢 Sayali Akhade 在这里为我提供了它的解决方案
我不知道必须单击按钮两次的第三个问题。
推荐阅读
- entity-framework - 当我不希望它时,EF Core 加载关系
- mysql - MYSQL 搜索 WHERE 值在 json_encoded 字段中
- mongodb - 如何使用 Debezium MongoDB Source Connector 将 JSON 值转换为 Kafka 消息键?
- tensorflow - tflite模型的反向转换
- excel - excel查找值并替换另一个单元格的值
- r - 如何解决在 R 上安装软件包的“写入错误”?
- spring-boot - Spring Boot 和 Spring Data Moore 发布
- c# - SmartCard 自定义凭据提供程序
- java - 通过 Apache POI 添加计算字段时遇到问题
- oracle - 我应该从 varray 还是在嵌套游标中查询?