gpt4 book ai didi

javascript - 类型 'addRule' 上不存在属性 'insertRule' 和 'StyleSheet'

转载 作者:数据小太阳 更新时间:2023-10-29 06:00:09 26 4
gpt4 key购买 nike

我有如下 typescript 代码:-

export function getRootWindow():Window {
return window.top;
}

export function getRootDocument():HTMLDocument {
return getRootWindow().document;
}


declare global {
interface Document {
documentMode?: any;
}
}


export function isBrowserIE() {
return getRootDocument().documentMode;
}

export function addCssRule(cssString:string, num:number) {
let isIE = isBrowserIE();

if(getRootDocument().styleSheets[0] == undefined) {
let head = getRootDocument().head || getRootDocument().getElementsByTagName('head')[0];
let style = getRootDocument().createElement('style');

head.appendChild(style);
}

if(isIE) {
getRootDocument().styleSheets[0].addRule(cssString,num);
}else {
getRootDocument().styleSheets[0].insertRule(cssString,num);
}
}

此代码在 javascript 中运行良好:-

<!DOCTYPE html>
<html>
<head>

</head>
<body style="color: #fff; font-family: arial, sans-sarif; background-color: #333; text-align: center;">

<h2>My mute speaker</h2>

<a href="#" class="datawrkz_speaker">
<span></span>
</a>

<script>

if(document.styleSheets[0] == undefined) {
var head = document.head || document.getElementsByTagName('head')[0];
var style = document.createElement('style');

head.appendChild(style);
}


var datawrkz_speaker = document.getElementsByClassName("datawrkz_speaker")[0];

datawrkz_speaker.addEventListener("click", function() {
this.classList.toggle("mute");
});

function addCssRule(cssString, num) {
var isIE = /*@cc_on!@*/false || !!document.documentMode;

if(isIE) {
document.styleSheets[0].addRule(cssString, num);
}else {
document.styleSheets[0].insertRule(cssString,num);
}

}

// set css rules as below for mute button

addCssRule(".datawrkz_speaker {height: 30px; width: 30px; position: relative; overflow: hidden; display: inline-block; }", 0);

addCssRule(".datawrkz_speaker span {display: block; width: 8px; height: 8px; background: #fff; margin: 11px 0 0 2px; }", 1);

addCssRule(".datawrkz_speaker span:after {content: ''; position: absolute; width: 0; height: 0; border-style: solid; border-color: transparent #fff transparent transparent; border-width: 10px 14px 10px 15px; left: -13px; top: 5px;}", 2);

addCssRule(".datawrkz_speaker span:before {transform: rotate(45deg); border-radius: 0 50px 0 0; content: ''; position: absolute; width: 5px; height: 5px; border-style: double; border-color: #fff; border-width: 7px 7px 0 0; left: 18px; top: 9px; transition: all 0.2s ease-out; }", 3);

addCssRule(".datawrkz_speaker:hover span:before {transform: scale(0.8) translate(-3px, 0) rotate(42deg); }", 4);

addCssRule(".datawrkz_speaker.mute span:before {transform: scale(0.5) translate(-15px, 0) rotate(36deg); opacity: 0; }", 5);


</script>

</body>
</html>

我在 Typescript 中遇到错误(上面的第一个代码片段):-

一个。 “StyleSheet”类型上不存在属性“addRule”

“StyleSheet”类型上不存在属性“insertRule”

最佳答案

这是因为 StyleSheet 类型确实缺少 addRule 和 insertRule 方法。这些方法在 CSSStyleSheet 类型上定义。

你可以说 typescript 你真的知道类型是 CSSStyleSheet 而不是预测的 StyleSheet 通过强制打字并在 addRule 调用中添加对 num 的 .toString 调用(因为打字它需要)。

有 2 种可能的语法如何做到这一点。

if (isIE) {
(getRootDocument().styleSheets[0] as CSSStyleSheet).addRule(cssString, num.toString());
} else {
(getRootDocument().styleSheets[0] as CSSStyleSheet).insertRule(cssString, num);
}

替代语法

if (isIE) {
(<CSSStyleSheet>getRootDocument().styleSheets[0]).addRule(cssString, num.toString());
} else {
(<CSSStyleSheet>getRootDocument().styleSheets[0]).insertRule(cssString);
}

关于javascript - 类型 'addRule' 上不存在属性 'insertRule' 和 'StyleSheet',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44897499/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com