JS和CSS的交互

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
应用实时监控服务ARMS - 应用监控,每月50GB免费额度
简介: 主写的是js与css怎么样去交互,有什么样式和方法。最后面也写了四大系列接触编程语言第一次发布作品见谅

一、JS与css交互的基本介绍

1、问题引入

css样式设置三种方式: 行内式、内部式和外部式。
JavaScript获取css样式有两种情况:行内样式非行内样式

2、行内样式

通过element.style.attr(元素.style)可获取可设置

3、非行内式

因浏览器的不同,一种基于IE浏览器和非IE浏览器

基于IE的非行内获取:element.currentStyle['attr']
基于非IE的非行内获取:getComputedStyle(element.null/伪类)[attr]
【PS】非行内的只能获取不能设置*

//函数封装,方便调用:兼容所有浏览器
function getStyle(obj,name){
   //obj:操作那个标签 name:该标签的属性
if (obj.currentStyle) {
    //兼容IE
        return obj.currentStyle[name];
    } else {
    //兼容非IE
        return getComputedStyle(obj, false)[name];
    }
}

二、JavaScript 四大特效

三大系列:offset、scroll、client 事件对象:event (事件被触动时,鼠标和键盘的状态,通过属性控制)

1、offset 系列

offset:偏移量,使用offset系列相关属性可以动态的得到该元素的位置(偏移)、大小等。

  • 获得元素距离带有定位父元素的位置
  • 获得元素自身的大小(宽度高度)

offsetWidthoffsetHeight

  • 检测盒子自身宽高+padding+border
offsetWidth = width + padding + border;
offsetHeight = Height + padding + border;

offsetLeftoffsetTop

  • 检测距离父盒子有定位的左/上面的距离

返回距上级盒子中带有定位的盒子左边和上边的距离。和盒子本身有无定位无关。
如果父级都没有定位则以 body 为准。
offsetLeft 从父级的 padding 开始算,父级的 border 不算。
在父盒子有定位的情况下,offsetLeft == style.left (去掉px)

offsetLeftstyle.left 区别

  • 最大区别在于offsetLeft 可以返回没有定位盒子的距离左侧的位置。 而 style.left不可以。
  • offsetLeft 返回的是数字,而 style.left 返回的是字符串,除了数字外还带有单位:px。
  • offsetTop只读,而 style.top 可读写。(只读是获取值,可写是赋值)
  • 如果没有给 HTML 元素指定过 top 样式,则style.top 返回的是空字符串。(style.left在等号的左边和右边还不一样。左边的时候是属性,右边的时候是值。)

2、client系列

client 客户端,使用 client 系列的相关属性来获取元素可视区的相关信息。通过 client 系列的相关属性可以得到元素的边框大小,元素大小。

clientWidthclientHeight

clientWidth:获取网页可视区域宽度
clientHeight:获取网页可视区域高度

//奇怪的浏览器
var w1=document.body.clientWidth;
//标准浏览器
var w2=document.documentElement.clientWidth;
//IE9+
window.innerWidth;

clienetXclientY

clientX:鼠标距离可视区域左侧距离(event调用)
clientY:鼠标距离可视区域上侧距离(event调用)

clientTopclientLeft

获取盒子的border的宽高,
获取屏幕的可视区兼容的写法

function client(){
   
    if(window.innerWidth !=null){
   //IE9+ 目前最新的浏览器
        return{
   
        width:window.innerWidth,
        height:window.innerHeight;
        }
    }else if(document.compatMode ==="CSS1Compat"){
   //标准的浏览器
        return{
   
        width:document.documentElement.clientWidth,
        height:document.documentElement.clientHeight;
        }
    }
    return{
   //奇怪的浏览器
        width:document.body.clientWidth,
        height:document.body.clientHeight;
    }
}

未声明DTD时

document.body.scrollTop

声明DTD时

document.documentElement.scrollTop

以上支持的

window.pageYOffset

3、Scroll系列

scroll 滚动的,使用相关属性可得到改元素的大小。滚动距离等。

ScrollWidthScrollHeight(不包border)

检测盒子的宽高。(调用者:节点元素、属性)
盒子内容的宽高。(如有内容超出,显示内容的高度)

4、event事件对象

一个事件中的内置对象,内部装了很多关于鼠标和事件本身的信息。

event的获取

在事件绑定的函数中,加参数,这个参数就是ecent
Box.onclick=function (event){
   }

兼容获取方式

  • 不写参数直接使用event
  • 写参数,但是参数为event
    event ||window.event
    
    scrennX 、pageX 和clientX 的区别

pageY /pageX:鼠标位于整个页面的顶部和左侧部分的距离。(页面)
pcreenY /pcreenX:鼠标位于屏幕的上方和左侧的距离。(屏幕)
clientY /clientX:鼠标位于浏览器的左侧和顶部的距离。(浏览器大小和位置)

pageY 和pageX的兼容写法

页面的位置=看得见+看不见
pageX/Y=event.clientX/Y+scroll().top/scroll().left

5、三大系列区别

  1. Width 和 height

clientWidth=width+padding
clientHeight=height+padding
offsetWidth=width+padding+border
offsetHeight=height+padding+border
scrollWidth=内部宽度(不包含border)
scrollHeight=内部高度(不包含border)

2.top 和 left

`offsetTop`/`offsetleft`:
                    调用者:任意元素。(盒子为主)
                    作用:距离父系盒子中带有定位的距离
    `scrollTop`/`scrollLeft`:(盒子也可以调用,必须有滚动条)
                    调用者:
                        document.body.scrollTop/...(window)
                    作用:浏览器无法显示的部分(被卷去的部分)
    `clientY`/`clientX`:(clientTop/clientLeft 值得是border)
                        调用者:event.clientX(event)
                        作用:鼠标距离浏览器可视区域的距离(左、上)    

6、获取屏幕宽高

window.screen.width
window.screen.Height
【ps】分辨率是屏幕图像的精密度,指显示器的像素有多少。

上一章:DOM编程进阶(JS)
下一章:表单验证(JS)

相关文章
|
4天前
|
前端开发 JavaScript
文本,wangEditor5展示HTML无样式,wangEditor5如何看源码,Ctrl + U看CSS文件,代码高亮,Prism.js可以实现,解决方法,参考网页源代码的写法
文本,wangEditor5展示HTML无样式,wangEditor5如何看源码,Ctrl + U看CSS文件,代码高亮,Prism.js可以实现,解决方法,参考网页源代码的写法
|
6天前
|
JavaScript 前端开发 容器
vue组件封装——固定宽高比的容器(2种方法:纯CSS实现 + JS实现)
vue组件封装——固定宽高比的容器(2种方法:纯CSS实现 + JS实现)
9 2
|
6天前
|
JavaScript 前端开发
vue 模拟随机变速的动态打字特效【支持多行文本】(含css实现闪烁光标,js动态改变setInterval定时器的时间间隔)
vue 模拟随机变速的动态打字特效【支持多行文本】(含css实现闪烁光标,js动态改变setInterval定时器的时间间隔)
10 1
前后端数据交互,request.js文件添加拦截器的写法,数据请求失败后的固定写法
前后端数据交互,request.js文件添加拦截器的写法,数据请求失败后的固定写法
|
4天前
|
JavaScript 数据安全/隐私保护 索引
node.js 命令行交互工具(最新版) inquirer.js 实用教程
node.js 命令行交互工具(最新版) inquirer.js 实用教程
8 0
|
6天前
|
前端开发 JavaScript
【HTML+CSS+JavaScript】3d-boxes-background
【HTML+CSS+JavaScript】3d-boxes-background
6 0
|
6天前
|
前端开发 JavaScript
js 进入浏览器全屏(F11效果)、退出全屏、指定元素全屏、判断当前是否全屏、监听浏览器全屏事件、定义全屏时的css样式(全屏伪类)
js 进入浏览器全屏(F11效果)、退出全屏、指定元素全屏、判断当前是否全屏、监听浏览器全屏事件、定义全屏时的css样式(全屏伪类)
10 0
|
2月前
|
JavaScript
JS+CSS3点击粒子烟花动画js特效
JS+CSS3点击粒子烟花动画js特效
26 0
JS+CSS3点击粒子烟花动画js特效
|
前端开发 JavaScript
js css 悬浮动画字体
js css 悬浮动画字体
|
Web App开发 前端开发 JavaScript
孤陋寡闻了,才知道已经可以用 JS 来控制 CSS 动画了
最近翻 MDN 突然发现一套叫 Web Animations API 的东东,点进去看才知道,原来是一套控制 css animation 的 API,而且已经有段时间了 🤦‍♂️,而我居然一直不知道。