CSS变量在移动Safari上不更新
CSS Variables Not Updating on Mobile Safari
我使用Javascript将CSS变量的值设置为每半秒一个随机数,并将数据显示为饼状图,如这个CodePen所示,它在我的桌面浏览器上运行良好,但在移动Safari上似乎无法更新。我读到SCSS可能能够提供功能,但如果可能的话,我宁愿保持纯css和javascript的解决方案。
Css:#CPUPie {
position: relative;
width: 100px;
height: 100px;
border-radius: 50%;
background: yellowgreen;
background-image:
linear-gradient(to right, transparent 50%, #655 0);
color: transparent;
text-align: center;
}
#CPUPie::before {
content: '';
position: absolute;
top: 0; left: 50%;
width: 50%; height: 100%;
border-radius: 0 100% 100% 0 / 50%;
background-color: inherit;
transform-origin: left;
transform: rotateZ(var(--CPUPiePercent));
background: var(--CPUPieBackground);
}
Javascript: var CPUPie = document.createElement("div");
CPUPie.id = "CPUPie";
document.body.appendChild(CPUPie);
setInterval(update, 500);
update();
function update() {
var CPUPiePercent = Math.random();
if (CPUPiePercent > .5 && CPUPiePercent != 1) {
document.documentElement.style.setProperty("--CPUPiePercent", (CPUPiePercent - .5) + "turn");
document.documentElement.style.setProperty("--CPUPieBackground", "#655");
}
else {
document.documentElement.style.setProperty("--CPUPiePercent", CPUPiePercent + "turn");
document.documentElement.style.setProperty("--CPUPieBackground", "yellowgreen");
}
}
对CSS变量的支持仍然相当不稳定。我建议在javascript中存储/更新变量,并按照这样设置它们。
因为你只是在前面的伪元素上切换背景,所以我把它改成两个不同的类
#CPUPie.brown::before {
background-color: #655;
}
#CPUPie.green::before {
background-color: yellowgreen;
}
然后像这样使用你的javascript:
if (CPUPiePercent > .5 && CPUPiePercent != 1) {
document.querySelector('#CPUPie').style.transform = 'rotate(' + ((CPUPiePercent - .5) * 360) + 'deg';
document.querySelector('#CPUPie').classList.remove('yellowgreen');
document.querySelector('#CPUPie').classList.add('brown');
}
else {
document.querySelector('#CPUPie').style.transform = 'rotate(' + (CPUPiePercent * 360) + 'deg';
document.querySelector('#CPUPie').classList.add('yellowgreen');
document.querySelector('#CPUPie').classList.remove('brown');
}
在我的例子中,我通过简单地创建一个具有与pseudo元素相似属性的新div并将其分层在CPUPie之上来解决这个问题。更新的CodePen可以在这里找到。
CSS#CPUPie {
position: absolute;
width: 100px;
height: 100px;
border-radius: 50%;
background: yellowgreen;
background-image:
linear-gradient(to right, transparent 50%, #655 0);
color: transparent;
text-align: center;
}
#CPUPieSlice {
position: absolute;
left: 57.5px;
width: 50px; height: 100px;
border-radius: 0 100% 100% 0 / 50%;
background-color: transparent;
transform-origin: left;
}
JS
var CPUPie = document.createElement("div");
CPUPie.id = "CPUPie";
document.body.appendChild(CPUPie);
var CPUPieSlice = document.createElement("div");
CPUPieSlice.id = "CPUPieSlice";
document.body.appendChild(CPUPieSlice);
setInterval(update, 500);
update();
function update() {
var CPUPiePercent = Math.random();
if (CPUPiePercent > .5 && CPUPiePercent != 1) {
document.getElementById("CPUPieSlice").style.transform = "rotate(" + (CPUPiePercent - .5) + "turn)";
document.getElementById("CPUPieSlice").style.background = "#655";
}
else {
document.getElementById("CPUPieSlice").style.transform = "rotate(" + CPUPiePercent + "turn)";
document.getElementById("CPUPieSlice").style.background = "yellowgreen";
}
}
相关文章:
- Javascript循环不会自我更新
- 添加文字和评论功能更新Div
- 在Safari执行javascript之前对其进行修改
- AngularJS:ng之后,重复$scope值未按预期更新
- 如何通过数组更新角度子范围
- Ajax聊天消息重复而不仅仅是更新
- 通过CSV文件上载更新数据库表
- 平均值:无法将数据更新到数据库
- $rootScope未使用forEach进行更新
- onbeforeunload和asp:Safari和FireFox中的更新面板
- Safari在表单提交期间未更新UI
- 更新链接形状时,Safari中的SVG clipPath与USE断开
- JQuery AJAX调用本地更新脚本在Safari中失败,在Chrome和FF中工作
- Safari:绝对定位的DIV在通过DOM更新时不会移动
- Angular的ng风格不会在Safari中更新
- 如何在Safari中通过Javascript更新HTML对象数据和类型
- 有人知道你是怎么更新拦截列表的吗?用于safari内容拦截器的Json文件
- CSS变量在移动Safari上不更新
- iOS6 Mobile Safari: geolocation.watchPosition的准确性和更新周期
- Safari javascript对象未更新