美文网首页视觉艺术
基本网页特效(一)

基本网页特效(一)

作者: OmewSPG | 来源:发表于2021-10-23 10:26 被阅读0次

offset系列

offset概述

offset.png

offset与style的区别

offset与style的区别.png

演示

HTML:

    <div class="father">
        <div class="son"></div>
    </div>
    <div class="w"></div>

CSS:

    <style>
        * {
            margin: 0;
            padding: 0;
        }

        .father {
            position: relative;
            width: 200px;
            height: 200px;
            background-color: pink;
            margin: 150px;
        }

        .son {
            width: 100px;
            height: 100px;
            background-color: purple;
            margin-left: 45px;
        }

        .w {
            height: 200px;
            background-color: skyblue;
            margin: 0 auto 200px;
            padding: 10px;
            border: 15px solid red;
        }
    </style>
image.png
  • 元素偏移offset:可以得到元素的偏移位置,返回不带单位的数值
        var father = document.querySelector('.father');

        console.log(father.offsetTop);   // 150
        console.log(father.offsetLeft);   // 150

如果有定位的父元素,则以定位父元素为准
如果没有定位的父元素,则以body为准

        var son = document.querySelector('.son');

        console.log(son.offsetTop);    // 0
        console.log(son.offsetLeft);   // 45
  • 获取元素大小:返回的值是元素固有的宽度或高度加上padding和border的值
        var w = document.querySelector('.w');
        
        console.log(w.offsetWidth);   // style 中并没有设定 width 值,所以会根据其在屏幕中显示的大小来输出值
        console.log((w.offsetHeight));  // 250 = 200 + (10 + 15)*2
  • 返回当前元素的父元素:
        console.log(son.offsetParent);  // 返回带有定位的父元素,否则直接返回body
        console.log(son.parentNode);   // 直接返回父元素

得到鼠标在盒子中的距离

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">

    <style>
        .box {
            width: 300px;
            height: 300px;
            background-color: pink;
            margin: 200px;
        }
    </style>
</head>

<body>
    <div class="box"></div>

    <script>
        // 得到鼠标在盒子中的距离
        var box = document.querySelector('.box');
        box.addEventListener('mousemove',function(e){
            // console.log(e.pageX);
            var x = e.pageX - this.offsetLeft;    //  鼠标离文档左边界的距离 - div盒子离文档左边界的距离
            var y = e.pageY - this.offsetTop;     //  同上
            // console.log(x);
            // console.log(y);
            this.innerHTML = 'index_X: ' + x + '    index_Y: ' + y;
        });
    </script>
</body>
</html>

client系列

元素可视区client系列

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


元素可视区client.png

client属性

client.png
        // client 宽度 和我们offsetWidth 最大的区别就是 不包含边框
        var div = document.querySelector('div');
        console.log(div.clientWidth);

立即执行函数

  • 传统函数的声明与调用:不调用不执行:
        function fn() {
            console.log(1);
        }
        fn();
  • 立即执行函数:不需要调用,立马能够自己执行的函数:
( function() {} )();

也可以这样写:

( function(){}() );

可以传递参数进来:

        (function (a, b) {
            console.log(a + b);
            var num = 10;
        })(1, 2);     // 第二个小括号可以看做是调用函数

或者:

        (function sum(a, b) {
            console.log(a + b);
            var num = 10;     // 局部变量
        }(2, 3));

立即执行函数最大的作用就是 独立创建了一个作用域, 里面所有的变量都是局部变量 不会有命名冲突的情况

现在分析以下立即执行函数

(function flexible(window, document) {
    var docEl = document.documentElement        // 获取的html 的根元素
    var dpr = window.devicePixelRatio || 1           // dpr 物理像素比

    // adjust body font size  设置我们body 的字体大小
    function setBodyFontSize() {
        // 如果页面中有body 这个元素 就设置body的字体大小
        if (document.body) {
            document.body.style.fontSize = (12 * dpr) + 'px'
        } else {
            // 如果页面中没有body 这个元素,则等着 我们页面主要的DOM元素加载完毕再去设置body
            // 的字体大小
            document.addEventListener('DOMContentLoaded', setBodyFontSize)
        }
    }
    setBodyFontSize();

    // set 1rem = viewWidth / 10    设置我们html 元素的文字大小
    function setRemUnit() {
        var rem = docEl.clientWidth / 10
        docEl.style.fontSize = rem + 'px'
    }
    setRemUnit()

    // reset rem unit on page resize  当我们页面尺寸大小发生变化的时候,要重新设置下rem 的大小
    window.addEventListener('resize', setRemUnit)
        // pageshow 是我们重新加载页面触发的事件
    window.addEventListener('pageshow', function(e) {
        // e.persisted 返回的是true 就是说如果这个页面是从缓存取过来的页面,也需要从新计算一下rem 的大小
        if (e.persisted) {
            setRemUnit()
        }
    })

    // detect 0.5px supports  有些移动端的浏览器不支持0.5像素的写法
    if (dpr >= 2) {
        var fakeBody = document.createElement('body')
        var testElement = document.createElement('div')
        testElement.style.border = '.5px solid transparent'
        fakeBody.appendChild(testElement)
        docEl.appendChild(fakeBody)
        if (testElement.offsetHeight === 1) {
            docEl.classList.add('hairlines')
        }
        docEl.removeChild(fakeBody)
    }
}(window, document))

scroll系列

scroll直译过来为滚动的,使用scroll系列的相关属性可以动态得到该元素的大小、滚动距离等

scroll.png scroll属性.png

HTML:

    <div class="box">
        This is a very long para...
        This is a very long para...
        This is a very long para...
        This is a very long para...
        This is a very long para...
        This is a very long para...
        This is a very long para...
        This is a very long para...
        This is a very long para...
        This is a very long para...
        This is a very long para...
        This is a very long para...

    </div>
image.png

scrollHeight 与 clientHeight 异同:

  • 都是只包含 width 和 padding ,不包含 border 和 margin
  • scrollHeight 包含盒子中内容的长度,clientHeight 仅包含元素可视区的长度
        var div = document.querySelector('.box');

        console.log(div.scrollHeight);    // 332
        console.log(div.clientHeight);    // 220

scroll 滚动事件:当滚动条发生变化时,会触发事件

        div.addEventListener('scroll', function(){
            console.log(div.scrollTop);      // 返回被卷起的上侧距离
        })

三大系列总结

三大系列总结1.png

它们的主要用法:

  • offset系列:常用于获得元素位置:offsetLeft 、offsetTop
  • client系列:常用于获取元素大小:clientWidth、clientHeight
  • scroll系列:常用于获取滚动距离:scrollTop、scrollLeft、
  • 注意页面滚动的距离通过window.pageXOffset获得

mouseover与mouseenter的区别

当鼠标移动到元素上就会触发mouseenter事件
类似于mouseover,它们之间的区别是:

  • mouseover 鼠标经过自身盒子会触发,经过子盒子还会触发。而mouseenter只会经过自身盒子触发
  • 之所以这样,是因为mouseenter不会冒泡
  • 跟mouseenter搭配使用的mouseleave同样不会冒泡

相关文章

  • 基本网页特效(一)

    offset系列 offset概述 offset与style的区别 演示 HTML: CSS: 元素偏移offse...

  • 2017-3-14 JS学习笔记

    document 获取网页基本结构 document 可以把一些东西写在网页中 写入网页的基本结构 星海特效的一些...

  • 基本网页特效(二)

    动画 动画原理 动画函数封装 缓动动画 缓动动画原理 缓动动画在多个目标点之间的移动 点击animate按钮,图片...

  • 第八节 特效、选择器、过滤器

    1、特效 网页显示: 2 、基本选择器 3、层级选择器 网页显示: 4、筛选器 网页显示: 5、筛选器(conta...

  • 网页特效

    元素偏移量offset系列 动态获取元素的偏移 获取元素距离带有定位父元素的位置 获取元素的自身大小 返回的数值都...

  • 前端基本功--js实战1 9.24

    一、js作用1.网页特效2.网页交互3.表单验证总之就是控制结构和样式。二、js基本语句都是属于内置对象,内置对象...

  • JavaScript网页特效(一)

    介绍常用js的字符串操作api ❤❤❤ 介绍常用js的保留小数操作api ❤❤ 介绍常用js的大小写转换操作a...

  • 文斌跟着李南江学习HTML5—CSS学习

    经过一个星期的学习,让我们了解了网页的基本结构搭建,但是在网上搜索别人的网页都是五彩缤纷,各种特效,这时老师...

  • 网站推荐 (不定时更新)

    1.网页设计 jQuery插件库:JS特效,网页特效,以及各种html5,css3动画和效果Bootstrap,来...

  • 常见网页特效

    1.下拉框联动 下拉框联动效果用于在两个或多个内容相关联的下拉框中选取数据,比如在招聘网站中选择求职意向时,需要先...

网友评论

    本文标题:基本网页特效(一)

    本文链接:https://www.haomeiwen.com/subject/glxhaltx.html