首页 > 编程语言 >浏览器中的JavaScript(3)

浏览器中的JavaScript(3)

时间:2023-02-10 19:25:02浏览次数:46  
标签:style 元素 浏览器 样式 JavaScript CSS 属性

3.操作CSS

摘要:
我们已经知道了JavaScript可以控制HTML文档的逻辑结构和内容。通过对CSS编程,Javascript也可以控制文档的外观和布局。接下来讲解几种JavaScript可以用来操作CSS的不同技术。

3.1 css类

使用JavaScript影响文档内容样式的最简单方式是给HTML标签的class属性添加或删除CSS类名。Element对象的classList属性可以来方便的实现此类操作。

下面这个例子:

 

 //假设“tool”元素在html中有class=“hidden”
   document.querySelector("#tool").classList.remove("hidden")//这样使它变得可见
   document.querySelector("#tool").classList.add("hidden");

 

 

 

 3.2行内样式

继续前面工具提示条(tooltip)的例子,假设文档的结构中只包含一个提示条元素,而我们想在显示他之前动态把它定位好。一般来说,我们不可能值对提示条的所有可能位置都创建一个类,因此classList属性不能用于定位。

这种情况下,我们需要用程序修改提示条在HTML中的style属性,设置指针对于他自己的行内样式。DOM在所有Element对象上都定义了对应的style属性。但与大多数景象属性不同,这个style属性不是字符串,而是CSS样式文本解析之后。但与大多数镜像属性不同,这个style属性不是字符串,而是CSSStyleDeclaration对象,是对HTML中作为style属性的css样式文本解析之后得到一个表示。要在JavaScript中显示和设置提示条的位置可以使用类似下面的代码:

<script>
  function displayAt(tooltip,x,y){
    tooltip.style.display = "block";
    tooltip.style.position = "absolute"
    tooltip.style.left=`${x}px`;
    tooltip.style.top = `${y}px`;
  }
</script>

 

在使用CSSStyleDeclaration的样式属性时,要记住所有值都必须是字符串。在样式表或style属性里,可以这样写:

 display: block;
 font-family: 'Courier New', Courier, monospace;
 background-color: #ffffff;

 

但在JavaScript要对元素e设置相同的样式,必须给所有的值都加上引号:

e.style.display = "block";

e.style.fontFamily = "sans-serif";

e.style.background = "#fffff"

有时候,以字符串而非CSSStyleDeclaration对象形式设置和读取行内样式惠更方便。为此,可以使用Element的getAttribute()和setAttribute()方法,或者也可以使用CSSStyleDeclaration对象的cssText属性:

//把元素e的行内样式赋值给元素f
    f.setAttribute("style",e.getAttribute("style"));
    //或者,这样也可以
    f.style.cssText = e.style.cssText;

4.3计算样式

元素的计算样式 (computed style)是浏览器根据一个元素的行内样式和所有样式表中适用的样式规则导出(或计算得到)的一组属性值,浏览器实际上使用这组屈性值来显不该元素。与行内样式类似,计算样式同样以CSSStyleDeclaration 对象表不。但与行內样式不同的是,计算样式是只该的,不能修改计算样式,但表示一个元素计算样式的CSSStyleDeclaration 对象可以让你知道浏览器在渲染该元素时,使用了哪些厲性和值。使用window对象的getComputed()方法可以返回一个元素的计算样式。这个方法的第一个参数是要查询的元素,可选的第二个参数用于制定一个CSS伪元素(如::before 或::after):

 

let title = document.querySelector("#sectiontitle")
    let styles = document.getComputedStyle(title)
    let beforeStyles = window.getComputedStyle(title,"::before");

 getcomputedstyle()返回 的 CSSStyleDeclaration 对象中包含的属性,通當要比行内style 属性对应的 CSSStyleDeclaration 对象多很多。但计算样式比较难说,查询它们并一定总能得到想要的信息。以font-family 属性为例,它接收逗号分隔的宇体族的列表,以实现跨平台兼容。在查询计算样式的fontFamily 属性时,只是得到应用给元素的最特定于 font-family 样式的值,这可能会返回类似“arial,helvetica sans-serif”这样的值,并不说明实际使用了哪种字体。再比如,如果某元素没有被绝对定义,通过计算样式查询其 top 和left 属性经常会返回 auto。这是个合法的CSS值,但却不一定是你想找的。

4.4操作样式表

除了操作class属性和行内样式,JavaScript也可以操作样式表,样式表是通过<style>标签或<link rel = "stylesheet">标签与HTML文档关联起来的。这两个标签都是普通的HTML标签,因此可以为他们指定一个id属性,然后使用document.querySelector()找到它们。style和link标签对应的Element对象都有disabled属性,可以用它禁用整个样式表。

比如,可以像这个例子一样:

function toggleTheme(){
        let lightTheme = document.querySelector("#light-theme");
        let darkTheme = document.querySelector("#dark-time");
        if(darkTheme.disabled){
            lightTheme.disabled = true;
            darkTheme.disabled = false;
        }else{
            lightTheme.disabled =false;
            darkTheme.disabled = true;
        }
    }

 

4.5CSS动画与事件

假设你的样式表中定义了下面两个CSS类:

.transparent{opacity: 0;}
.fadeable{transition:opacity .5s ease-in}

 

如果把第一个样式应用给某个元素,该元素会变成完全透明,不可见。而第二个样式中的过度属性会告诉浏览器当元素的不透明变化时,改变话应该在0.5秒的时间内以动画的形式呈现。其中的ease-in要求不透明度的变化应该先快后慢。

  <style>
       .transparent{opacity: 1;}
       .fadeable{transition:opacity .5s ease-in}

    </style>
</head>
<body>
   <div id="subscribe" class="fadeable notification">12331</div>

</body>
<script>
  document.querySelector("#subscribe").classList.add("transparent")
</script>

 

JavaScript也可以用来监控CSS过度动画的进度,因为浏览器在过度动画的开始和结束都会触发事件。首次触发过度时,浏览器会派发“transitionrun”事件。这时候可能指定transition-delay样式,而当动画完成时,则会派发“transistionend”事件。当然,所有这些事件的目标都是发生动画的元素。这些事件传给处理程序的事件对象是一个TransitionEvent对象。该对象的propertyName属性是发生动画的CSS属性,而“transistionend”时间对应的时间对象的elapsedTime属性是从“transistionstart”事件开始经过的秒数。

 

标签:style,元素,浏览器,样式,JavaScript,CSS,属性
From: https://www.cnblogs.com/user-zbb/p/17110089.html

相关文章

  • 这款浏览器火了,能快速使用ChatGPT,简单一看就会
    当下ChatGPT很火,影响的人数非常广泛。作为聊天机器人模型,ChatGPT能完成写论文、编代码、写新闻、画画等高难度要求。那么,如何使用ChatGPT呢?下面介绍一下几个使用方法。值得......
  • JavaScript 获取元素的 坐标位置
         https://blog.csdn.net/im20166456/article/details/113793437?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefaul......
  • JavaScript中的函数
    函数:一个被设计为执行特定任务的代码块语法通过function关键词定义,后面跟着其函数名称,然后是一对圆括号,圆括号中可以定义一些函数的参数。没有名称的函数呢?函数名称......
  • 浏览器中的JavaScript(2)
    2.2注册事件处理程序摘要:有两种事件处理程序的方式。第一种是web早期就有的,及设置作为事件的对象或文档元素的一个属性。第二种方法是把处理程序传给这个元素或对象或元......
  • ERR_UNSAFE_PORT浏览器安全问题无法访问的解决方案
    ERR_UNSAFE_PORT浏览器安全问题导致无法访问的解决方案目录ERR_UNSAFE_PORT浏览器安全问题导致无法访问的解决方案一、问题现象二、浏览器自身机制三、解决方法1.Goog......
  • 关于 JavaScript 中柯里化函数的实现,附带详细解析!
    前言大家好,我是CoderBin,在面试当中,手撕代码的场景屡见不鲜,手写JS当中的方法更是最常见的一种,所以本文将全面的,详细解析柯里化函数的实现原理,并手写出自己的柯里化函数,相......
  • 浏览器如何使用 HTTP 防止限制 ip
    当我们浏览网页尤其是频发刷新网页时,会跳出来验证码。主要因为频繁刷新导致目标网页限制了您本地ip,正常过一段时间也或许恢复,如果遇到紧急的事情急需访问,不妨试试下面的操......
  • Edge浏览器启动后上传数据
    Edge浏览器启动后上传数据最近发现edge在启动后,未打开任何标签的情况下,上传数据具体是什么还不太清楚,你有遇到这种情况吗?猜测:更新版本,备份数据?文章来源:刘俊涛的博客......
  • JavaScript如何做空字符串的校验
    通过正则表达式校验写法:1if(str&&/[^\s]/.test(str)){2//不为空3}else{4//为空5}注释:-正则表达式中\s是指空白,包括空格、换行、tab缩进等所有......
  • 常用浏览器即其内核
    常用浏览器有chrome、safari、IE、火狐(firefox)、Opera、360、搜狗等浏览器内核备注IETridentIE、猎豹安全、360极速浏览器、百度浏览器......