监听普通滚动条事件和监听富文本tinymce滚动事件普通div滚动栏和导航栏联动事件

本文探讨了JavaScript中普通div的滚动事件,详细解释了scrollTop属性的含义,并展示了如何实现滚动条与导航栏的联动效果。此外,还介绍了如何在富文本编辑器tinymce中监听滚动事件,包括鼠标滚轮和滚动条的行为分析。

1.普通div滚动事件

如果一个DIV高度是400px(即clientHeight为400),而里面的内容是一个很长的列表,内容的高度是1000px(即offsetHeight为1000)。那么,可见部分我们看到400px,1000px的内容中还有600px不可见。而这不可见的部分呢,正是我们通过拉动滚动条才能把这一部分显示出来。你如果滚动条不拉动,此时scrollTop为0,如果你把滚动条拉到底,显示出列表最下面的部分,此时,scrollTop为600。 所以scrollTop的取值区间为[0, 600]。 所以这个600可以理解为滚动条可以滚动的长度。

    setTimeout(() => {
        const dombox = document.querySelector("#dombox");
        dombox.addEventListener("scroll", () => {
          console.log("滚动高度", dombox.scrollTop);
        });
      }, 3000);

2.普通div滚动栏和导航栏联动事件

    scrollbox(dataList){
      setTimeout(() => {
        //获取每个内容div
        const domdiv=document.querySelectorAll('.domdiv')
        //累加高度
        var arr=[20]
        var sum=0
        domdiv.forEach((e)=>{
          sum=e.clientHeight+sum
          arr.push(sum)
        })
       
        //获取对应code和高度数组
        const bb= dataList.map((e,index)=>{
          return{
            code:e.paragraphNo,
            height:arr[index]
          }
        })
        //获取div的滚动栏
        const dombox = document.querySelector("#dombox");
        dombox.addEventListener("scroll", () => {
          bb.forEach(e=>{
            //在区间内跟随滚动
            if(dombox.scrollTop-e.height<e.height&&dombox.scrollTop-e.height>0){
              this.currentSectionCode = e.code;//样式高亮
            }
          })
        });
      }, 1000);
    },

3.富文本tinymce滚动事件

setTimeout(() => {
          var a = 0;
          var b = 0;
//给富文本添加监听事件
          const documents = this.$tinymce.activeEditor.contentDocument;
//监听鼠标滚动事件
          documents.addEventListener("mousewheel", (e) => {
            b = 2;
//监听滚动栏事件
            documents.addEventListener("scroll", () => {
              a = 1;
            });
            setTimeout(() => {
              if (a == 1 && b == 2) {
                console.log("documents", documents);
                a = 0;
              } else if (b == 2) {
                if (e.wheelDeltaY > 0) {//向上操作
                  console.log("up");
                } else {
                  console.log("down");//向下操作
                }
              }
            }, 500);
          });
        }, 3000);

### 关于 TinyMCE 的 setContent 方法与滚动条位置调整 在使用 TinyMCE 的 `setContent` 方法插入内容时,可能会遇到滚动条位置重置或调整的问题。以下是对该问题的详细分析解决方案。 #### 1. **TinyMCE 的 setContent 方法概述** `setContent` 是 TinyMCE 提供的一个方法,用于将指定的 HTML 内容插入到编辑器中[^1]。其语法如下: ```javascript tinyMCE.activeEditor.setContent(content); ``` - 参数:`content` 表示需要插入的 HTML 字符串。 - 返回值:无。 当调用 `setContent` 方法时,编辑器的内容会被完全替换为新的内容。如果新内容较多,可能会导致编辑器的滚动条位置发生变化。 --- #### 2. **滚动条位置重置或调整的原理** 在插入内容后,编辑器的 DOM 结构会发生变化,这可能导致滚动条自动移动到顶部或其他位置。为了解决这一问题,可以通过以下方式手动调整滚动条的位置: - 使用 TinyMCE 提供的 API 获取编辑器的内容区域,并调整其滚动条位置。 - 在 `setContent` 执行完成后,利用回调函数或异步操作确保滚动条调整生效。 --- #### 3. **具体实现方案** 以下是通过代码实现滚动条位置调整的示例: ```javascript // 获取当前滚动条位置 let currentScrollPosition = tinyMCE.activeEditor.getBody().scrollTop; // 插入新内容 tinyMCE.activeEditor.setContent(newContent); // 调整滚动条位置 this.$nextTick(() => { // 确保 DOM 更新完成后再执行 tinyMCE.activeEditor.getBody().scrollTop = currentScrollPosition; }); ``` **关键点解析**: 1. **获取当前滚动条位置**:在调用 `setContent` 方法之前,记录编辑器内容区域的 `scrollTop` 值。 2. **插入内容**:使用 `setContent` 方法更新编辑器内容。 3. **调整滚动条位置**:通过 Vue 的 `$nextTick` 方法确保 DOM 更新完成后,重新设置 `scrollTop` 值[^3]。 --- #### 4. **其他注意事项** - 如果需要在插入内容后滚动到特定位置(例如底部),可以使用以下代码: ```javascript tinyMCE.activeEditor.setContent(newContent); this.$nextTick(() => { tinyMCE.activeEditor.getBody().scrollTop = tinyMCE.activeEditor.getBody().scrollHeight; }); ``` - 如果编辑器启用了某些自定义窗口参数(如 `mce_windowresize`),可能会影响滚动条的行为。建议检查相关配置是否正确[^2]。 --- #### 5. **总结** 通过上述方法,可以在使用 `setContent` 方法插入内容后,有效控制滚动条的位置,避免因内容更新而导致的用户体验问题。结合 Vue 的 `$nextTick` 方法,能够确保 DOM 更新完成后执行滚动条调整逻辑。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

undefinedJJ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值