首页
学习
活动
专区
圈层
工具
发布
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    图解浏览器的各种距离

    因为这里要介绍一个 react 事件的坑点: react 事件是合成事件,所以它少了一些原生事件的属性,比如这里的 offsetY,也就是点击的位置距离触发事件的元素顶部的距离。...react-use 提供的 useMouse 的 hook 就解决了这个问题: 它是用 e.pageY 减去 getBoundingClientRect().top 减去 window.pageYOffset...这里的 getBoundingClientRect 是返回元素距离可以可视区域的距离和宽高的: 而 window.pageYOffset 也叫 window.scrollY,顾名思义就是窗口滚动的距离。...返回的数值是更精确的小数,所以算出来的也是小数。...:拿到 width、height、top、left 属性,其中 top、left 是元素距离可视区域的距离,width、height 绝大多数情况下等同 offsetHeight、offsetWidth

    59210

    这是一篇很好的互动式文章,Framer Motion 布局动画

    First 在 First 中,在任何布局变化发生之前,测量我们要做动画的元素的位置: 获取元素位置的一种方法是使用HTML元素的.getBoundingClientRect()方法: const Motion...使用 React 实现的代码: App.js import React from 'react' import Motion from './Motion' import '....碰巧是提,我们用来测量正方形的.getBoundingClientRect()方法也刚好返回元素的 width 和 height: const { width, height } = squareRef.current.getBoundingClientRect...而是将比例动画到1(如果我们将比例动画到0,元素将完全消失): animate({ from: deltaWidth, to: 1, // ... }); 使用 position 固定大小...换句话说,这个错误的发生是因为测量的距离和变换原点之间的差异:getBoundingClientRect()返回元素的左上角,而变换原点默认是在元素的中心。

    3.5K20

    useLayoutEffect的秘密

    前言 在React中针对DOM操作的最常见方法是使用refs来访问DOM节点,其实还有一种方法,就是使用useLayoutEffect来访问DOM节点,根据实际 DOM 测量(例如元素的大小或位置)来更改元素...().width; return result; } // 计算子元素的宽度,考虑了左侧位置和右侧间隙 const rect = node.getBoundingClientRect...) => { return width + moreWidth < containerWidth; }); // 返回可见子元素的最后一个的索引,如果没有可见的元素,则返回0 return...使用 useLayoutEffect它会影响性能!我们最不希望的是我们整个 React 应用程序变成一个巨大的同步任务。...使用ref直接对DOM进行修改。这样,React不会安排更新,也不需要急切地刷新effect。

    2.6K10

    你这磨人的小妖精——选中文本并标注的实现过程

    页面,是一个详情页,页面的内容是多个接口返回填进去的: 标题1 {接口1返回} 标题2 {接口2返回} ...}) => { // portal渲染的组件返回的react元素 return rect && createPortal( <aside style={style} id="lhyt-selection-portal...bottomright,中间就中间 Object.assign(aside.style, { left: `${left}px`, top: `${top}px`, width...原本设计是一个组件,实际上应该做成一个hook的,改起来也很简单,就不说了 最后 这个小功能使用只是一瞬间,但实现过程很复杂,涉及到的知识点比较多 react下使用原生js,避免直接和state、props...挂钩 react下使用原生js,react操作和原生js的dom操作严格分开,不可夹杂着一起使用 标注

    2.3K30

    前端弹幕实现

    前端弹幕实现 前言 目前视频播放平台弹幕几乎都是使用js操作dom的方式实现,由于篇幅的原因这次只展示js操作dom的实现方案。 下文代码展示使用的是react 16.2版本库。...容器宽高 state = { width: 0, height: 0 } barrageList = [] // 弹幕元素信息 rowArr = [] // 容器可以展示弹幕的行...}); } 创建弹幕dom 需要执行的任务有: 随机获取空闲行 随机一个行数,判断该行是否可以插入新的弹幕 可以使用,就将该行行数返回 不可以使用,就向后继续寻找可以使用的行 找到了就返回对应的行数...没找到,找随机行前面是否有可用的行,有就返回对应行数,没有就返回undefined // 获取空闲行 getIdleRow = () => { if (this.rowArr.length ===...} = this.state; const containerRect = container.getBoundingClientRect(); const domRect = dom.getBoundingClientRect

    3.4K41

    js判断元素在某个区域内是否可见(转)

    该函数返回一个Object对象,该对象有6个属性:top,lef,right,bottom,width,height;这里的top、left和css中的理解很相似,width、height是元素自身的宽高...所以你不用当心浏览器兼容问题,不过还是有区别的:IE只返回top,lef,right,bottom四个值,不过可以通过以下方法来获取width,height的值 var ro = object.getBoundingClientRect...getBoundingClientRect是获取可视区域相关位置信息的,使用这个属性来判断更加方便: function isElementInViewport (el) { var rect =...el.getBoundingClientRect(); return ( rect.top >= 0 && rect.left >= 0 &&...() */ ); } getBoundingClientRect兼容性 目前来说兼容性还是不错的,但是使用前还是查看一下caniuse比较好。

    8.4K20

    蜕变之始,useEffect 最后一种用法

    在一些特殊的场景里,我们需要跳出数据驱动 UI 的解题思路,例如为了避免出现性能瓶颈,在高频率的事件监听中,我们会选择直接使用原生 DOM 节点来解决问题 意思就是说,如果你想要跳出 React 的环境使用其他的方式开发...在一个复杂的项目中,我们可以使用 React 解决一部分逻辑,然后使用别的更合适的方案解决另外的问题,这样的灵活性提高了 React 项目的上限。...jQuery 我们也可以在这里放心使用百度地图 javaScript sdk,从而完整的在 react 项目中嵌入百度地图 function App() { // ......对于原生 DOM 而言,我们可以使用 getBoundingClientRect 来获取元素对象在可视区域中的位置信息 本案例中的判断规则非常简单粗暴,因此当同屏出现两个目标元素时会存在规则冲突,实践中的规则设计会更细致一些...getBoundingClientRect().y if (n1y > 0 && n1y < window.innerHeight) { setCurrent(0) }

    44210
    领券