JS随手笔记2

2020-07-14  本文已影响0人  kevin5979

位置的获取

    * {
        margin: 0;
        padding: 0;
      }

      div {
        width: 100px;
        height: 100px;
        margin-left: 50px;
        margin-top: 50px;
        padding: 20px;
        border: 30px solid #cccccc;
        background-color: red;
      }
    <div></div>
    <script>
      let oDiv = document.querySelector("div")
      oDiv.onclick = function (event) {
        event = event || window.event
        console.log("offsetX " + event.offsetX)
        console.log("offsetY " + event.offsetY)
        console.log("-----------------------")
        console.log("clientX " + event.clientX)
        console.log("clientY " + event.clientY)
        console.log("-----------------------")
        console.log("pageX " + event.pageX)
        console.log("pageY " + event.pageY)
        console.log("-----------------------")
      }
    </script>
位置

样式获取

var style = getComputedStyle(oDiv);
     通过getComputedStyle获取宽高不包括 边框和内边距
     只支持获取, 不支持设置
     只支持IE9及以上浏览器
var style = oDiv.currentStyle;
     通过currentStyle获取宽高不包括 边框和内边距
     只支持获取, 不支持设置
     只支持IE9及以下浏览器
oDiv.style.width = "100px";
     通过style获取宽高不包括 边框和内边距
     只能获取内设置的宽高
     支持获取和设置
     高低级浏览器都兼容

宽高获取

位置获取

网页高度获取

注:html文档中有 <!DOCTYPE html> 为标准模式,否则为怪异模式

document.compatMode === "CSS1Compat" // 标准渲染模式
document.compatMode === "BackCompat" // 怪异渲染模式

兼容写法:获取网页高度 / 宽度

function getScreen() {
        let width, height;
        if(window.innerWidth){
            width = window.innerWidth;
            height = window.innerHeight;
        }else if(document.compatMode === "BackCompat"){
            width = document.body.clientWidth;
            height = document.body.clientHeight;
        }else{
            width = document.documentElement.clientWidth;
            height = document.documentElement.clientHeight;
        }
        return {
            width: width,
            height: height
        }
    }

兼容写法:获取屏幕滚动高度 / 宽度

    function getPageScroll() {
        let x, y;
        if(window.pageXOffset){
            x = window.pageXOffset;
            y = window.pageYOffset;
        }else if(document.compatMode === "BackCompat"){
            x = document.body.scrollLeft;
            y = document.body.scrollTop;
        }else{
            x = document.documentElement.scrollLeft;
            y = document.documentElement.scrollTop;
        }
        return {
            x: x,
            y: y
        }
    }

函数防抖和节流

    /**
     * 函数防抖 - 只会执行一次,只能看到结果
     * @param {*} callback
     * @param {*} delay
     */
    function debounce(callback, delay) {
        let timerId = null;
        return function () {
            let that = this;
            let args = arguments;
            timerId && clearTimeout(timerId);
            timerId = setTimeout(function () {
                callback.apply(that, args);
            }, delay || 1000);
        }
    }
    /**
     * 函数节流 - 会执行几次不等,能看到过程
     * @param {*} callback
     * @param {*} delay
     */
    function throttle(callback, delay) {
        let timerId = null;
        let flag = true;
        return function () {
            if(!flag) return;
            flag = false;
            let that = this;
            let args = arguments;
            timerId && clearTimeout(timerId);
            timerId = setTimeout(function () {
                flag = true;
                callback.apply(that, args);
            }, delay || 1000);
        }
    }
END
上一篇 下一篇

猜你喜欢

热点阅读