JS和CSS的交互

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
性能测试 PTS,5000VUM额度
简介: 主写的是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)

相关文章
|
7天前
|
JavaScript 前端开发
JavaScript HTML DOM - 改变CSS
JavaScript HTML DOM - 改变CSS
15 4
|
4天前
|
前端开发 JavaScript
HTML+JavaScript+CSS DIY 分隔条splitter
HTML+JavaScript+CSS DIY 分隔条splitter
用CSS+JavaScript打造网页中的选项卡
用CSS+JavaScript打造网页中的选项卡
|
9天前
|
JavaScript 前端开发
JS配合CSS3实现动画和拖动小星星小Demo
本文通过代码示例展示了如何使用JavaScript和CSS3实现动画效果和拖动小星星的交互效果,包括文字掉落动画和鼠标拖动产生小星星动画的实现方法。
23 0
JS配合CSS3实现动画和拖动小星星小Demo
|
15天前
|
前端开发 JavaScript
uniapp动态修改css样式(通过js来修改css样式)
uniapp动态修改css样式(通过js来修改css样式)
|
6天前
|
JavaScript 前端开发
网页前端课程设计-【模仿】香港中文大学官网,轮播图及div+css布局,js的dom操作
这篇文章介绍了如何模仿香港中文大学官网进行网页前端课程设计,包括使用div+css布局、js的DOM操作以及实现轮播图等技术细节。
|
5月前
|
前端开发 JavaScript UED
前端开发的魔法:CSS动画与JavaScript的完美结合
本文将探讨如何利用CSS动画和JavaScript的结合,为前端页面增添生动的效果。我们将通过实例展示如何使用这两种技术为网页元素创建吸引人的动画效果,并讨论它们的优缺点和适用场景。
84 0
|
Web App开发 编解码 前端开发
浏览器原理 23 # 分层和合成机制:为什么CSS动画比JavaScript高效?
浏览器原理 23 # 分层和合成机制:为什么CSS动画比JavaScript高效?
139 0
浏览器原理 23 # 分层和合成机制:为什么CSS动画比JavaScript高效?
|
Web App开发 移动开发 前端开发
梅须逊雪三分白,雪却输梅一段香——CSS动画与JavaScript动画
CSS动画并不是绝对比JavaScript动画性能更优越,开源动画库Velocity.js等就展现了强劲的性能。
梅须逊雪三分白,雪却输梅一段香——CSS动画与JavaScript动画
|
JavaScript 前端开发 UED
为什么 CSS 动画比 JavaScript 高效?
为什么 CSS 动画比 JavaScript 高效?
123 0
为什么 CSS 动画比 JavaScript 高效?
下一篇
无影云桌面