ok~_~ok 2022-08-18 18:14 采纳率: 66.7%
浏览 107
已结题

如何理解点击侧边栏菜单,滚动到指定选项卡的这个判断条件

源码在: https://gitee.com/y_project/RuoYi/blob/v2.2/src/main/resources/static/ruoyi/index.js#L86
演示地址在: http://demo.ruoyi.vip/

scrollToTap(element)主要是在处理scrollVal,通过三个不同的 if语句控制 scrollVal 的值滚动到指定选项卡。第一个 if 语句好理解,如果 tab 栏的可视区域(visibleWidth)大于所有 tab 的宽度,说明可视区域能放得下所有的 tab ,则无需滚动。

第一个if语句
if ($(".page-tabs-content").outerWidth() < visibleWidth) {
    scrollVal = 0
}

问题是应该怎么理解下面的两个 if 语句?

img

img

  • 写回答

2条回答 默认 最新

  • ZionHH 2022-08-19 11:14
    关注

    img

          //滚动到指定选项卡  
          function scrollToTab(element) {
            var marginLeftVal = calSumWidth($(element).prevAll()),
                marginRightVal = calSumWidth($(element).nextAll());
    
            // 可视区域非tab宽度
            var tabOuterWidth = calSumWidth($(".content-tabs").children().not(".menuTabs"));
            //可视区域tab宽度
            var visibleWidth = $(".content-tabs").outerWidth(true) - tabOuterWidth;
            //实际滚动宽度
            var scrollVal = 0;
            if ($(".page-tabs-content").outerWidth() < visibleWidth) {
              scrollVal = 0;
            } else if (marginRightVal <= (visibleWidth - $(element).outerWidth(true) - $(element).next().outerWidth(true))) {
              // 右边tab总宽 <= 可视区 - 点击tab宽 - 后一个tab宽:这里就是右边tab宽度足够放在可视区域,再看下面的判断
              if ((visibleWidth - $(element).next().outerWidth(true)) > marginRightVal) {
                // 可视区域 - 后一个tab宽 > 右边tab宽:向左滚动左边tab总宽,再看下面while语句
                scrollVal = marginLeftVal;
                var tabElement = element;
                while ((scrollVal - $(tabElement).outerWidth()) > ($(".page-tabs-content").outerWidth() - visibleWidth)) {
                  // 滚动距离 - tab宽 > tabs总宽 - 可视区:这里是为了将右边的tab保持在可视区域内,动态计算向左滚动的距离
                  scrollVal -= $(tabElement).prev().outerWidth();
                  tabElement = $(tabElement).prev();
                }
              }
            } else if (marginLeftVal > (visibleWidth - $(element).outerWidth(true) - $(element).prev().outerWidth(true))) {
              // 左边tab总宽 > 可视区域 - 点击tab宽 - 前一个tab宽:说明左边tab宽度足够支持向左滚动
              scrollVal = marginLeftVal - $(element).prev().outerWidth(true); // 向左滚动,保留前一个在可视区域内
            }
            $('.page-tabs-content').animate({
              marginLeft: 0 - scrollVal + 'px'
            },
              "fast");
          }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 8月31日
  • 已采纳回答 8月23日
  • 赞助了问题酬金10元 8月18日
  • 创建了问题 8月18日

悬赏问题

  • ¥15 obsidian的中文层级自动编号
  • ¥15 同一个网口一个电脑连接有网,另一个电脑连接没网
  • ¥15 神经网络模型一直不能上GPU
  • ¥15 pyqt怎么把滑块和输入框相互绑定,求解决!
  • ¥20 wpf datagrid单元闪烁效果失灵
  • ¥15 券商软件上市公司信息获取问题
  • ¥100 ensp启动设备蓝屏,代码clock_watchdog_timeout
  • ¥15 Android studio AVD启动不了
  • ¥15 陆空双模式无人机怎么做
  • ¥15 想咨询点问题,与算法转换,负荷预测,数字孪生有关