基于水平滚动隐藏箭头

问题描述

我正在努力在以下水平滚动代码中进行微小的更改:http://jsfiddle.net/Lpjj3n1e/

当您一直滚动到右键时,我想使右键消失(就像左键一样)在原始代码中)。

应该有一个快速简便的解决方案,但我一直找不到。请帮我,谢谢你!

     $(function() {
       var print = function(msg) {
         alert(msg);
       };

       var setInvisible = function(elem) {
         elem.css('visibility','hidden');
       };
       var setVisible = function(elem) {
         elem.css('visibility','visible');
       };

       var elem = $("#elem");
       var items = elem.children();

       // Inserting Buttons
       elem.prepend('<div id="right-button" style="visibility: hidden;"><a href="#"><</a></div>');
       elem.append('  <div id="left-button"><a href="#">></a></div>');

       // Inserting Inner
       items.wrapAll('<div id="inner" />');

       // Inserting Outer
       debugger;
       elem.find('#inner').wrap('<div id="outer"/>');

       var outer = $('#outer');

       var updateUI = function() {
         var maxWidth = outer.outerWidth(true);
         var actualWidth = 0;
         $.each($('#inner >'),function(i,item) {
           actualWidth += $(item).outerWidth(true);
         });

         if (actualWidth <= maxWidth) {
           setVisible($('#left-button'));
         }
       };
       updateUI();

       $('#right-button').click(function() {
         var leftPos = outer.scrollLeft();
         outer.animate({
           scrollLeft: leftPos - 200
         },800,function() {
           debugger;
           if ($('#outer').scrollLeft() <= 0) {
             setInvisible($('#right-button'));
           }
         });
       });

       $('#left-button').click(function() {
         setVisible($('#right-button'));
         var leftPos = outer.scrollLeft();
         outer.animate({
           scrollLeft: leftPos + 200
         },800);
       });

       $(window).resize(function() {
         updateUI();
       });
     });

解决方法

主要问题似乎在于,单击左键时没有检查箭头是否应被移除的功能。

要对此进行测试,我们可以使用已经计算出的ActualWidth(但需要将其设置为全局值,以便其声明移动)。

还有另一个小问题需要纠正-如果maxWidth大于实际宽度,则不需要箭头。因此,在下面的代码中,setVisible已变为setVisibleIfNeeded

这是经过修订的JS-原始照片取自jsfiddle。每个更改旁边都有一个注释。

Future.microtask

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...