【问题标题】:jQuery Scroll: detect end and startjQuery Scroll:检测结束和开始
【发布时间】:2015-11-18 21:31:00
【问题描述】:

编辑>> Plunker:http://plnkr.co/edit/LY7LUAylvKQ3pIv9lhYM?p=preview

我已经为 Tab-Titles 实现了 jQuery Scroll,效果很好。

如果我在开头,左侧的箭头应该会消失,而当我向右移动时,它应该会显示出来。如果我在最后,右侧的箭头应该会消失。

如何检测起点和终点?我希望能够对窗口大小调整做出反应。

这些是按钮:

 $('#nextTabBtn').click(function () {
     var $target = $('.tabBoxMantle');
     if ($target.is(':animated')) return;
     $target.animate({
         scrollLeft: $target.scrollLeft() + 300
     }, 800);
 });


 $('#prevTabBtn').click(function () {
     var $target = $('.tabBoxMantle');
     if ($target.is(':animated')) return;
     $target.animate({
         scrollLeft: $target.scrollLeft() - 300
     }, 800);
 });

【问题讨论】:

  • 尝试添加标记,否则小提琴会很棒。
  • 把你的代码放到jsfiddle里,你可以通过scroll事件找到scrollLeft的位置,所以根据scroll的位置使用css设置为消失
  • @Mayank 问题已更新,plunker 添加。
  • 我对 Angular 不太熟悉,所以这里是大部分的答案。 Plunker
  • 谢谢@Shikkediel,这也是一个可行的解决方案。

标签: javascript jquery html angularjs


【解决方案1】:

我对 Angular 不太熟悉,但我仍然尝试解决您的问题

我已经创建了如下切换 Prev Tab 和 Next Tab Button 的函数

function ShowPreviousTabBtn() { // handles prev tab button visibility
  var $targetScroll = $('.auTabBoxMantle');
  if ($targetScroll.scrollLeft() == 0)
    $('#prevTabBtn').hide();
  else
    $('#prevTabBtn').show();
}
function ShowNextTabBtn() { // handles next tab button visibility
  var $targetScroll = $('.auTabBoxMantle');
  var $scrollwidthtotal = $targetScroll[0].scrollWidth;
  var $scrolledwidth = $targetScroll.width() + $targetScroll.scrollLeft();
  if ($scrollwidthtotal <= $scrolledwidth)
    $('#nextTabBtn').hide();
  else
    $('#nextTabBtn').show();
}

您的 app.js 的完整工作代码如下所示

angular.module('myApp', [])

.controller(

  "MainController",
  function($scope, $http, $window, $document, $location, $anchorScroll) {

    $scope.my = {};
    $scope.my.title = "jQuery Scroll Example";


    $http.get('data.json')
      .success(function(data) {
        $scope.my.tabs = data;
      });

    function ShowPreviousTabBtn() {
      var $targetScroll = $('.auTabBoxMantle');
      if ($targetScroll.scrollLeft() == 0)
        $('#prevTabBtn').hide();
      else
        $('#prevTabBtn').show();
    }

    function ShowNextTabBtn() {
      var $targetScroll = $('.auTabBoxMantle');
      var $scrollwidthtotal = $targetScroll[0].scrollWidth;
      var $scrolledwidth = $targetScroll.width() + $targetScroll.scrollLeft();
      if ($scrollwidthtotal == $scrolledwidth)
        $('#nextTabBtn').hide();
      else
        $('#nextTabBtn').show();
    }

    // Initially hide the previous Tab button
    ShowPreviousTabBtn();
    // Hiding the Next Tab if the Items div is not overflown
    ShowNextTabBtn();

    $('#nextTabBtn').click(function() {

      var $target = $('.auTabBoxMantle');
      if ($target.is(':animated')) return;
      $target.animate({
        scrollLeft: $target.scrollLeft() + 300
      }, 800)
      .promise().done(function() { // used as a callback function for animate
        ShowPreviousTabBtn();
        ShowNextTabBtn();
      });

    });

    $('#prevTabBtn').click(function() {
      var $target = $('.auTabBoxMantle');
      if ($target.is(':animated')) return;
      $target.animate({
          scrollLeft: $target.scrollLeft() - 300
        }, 800)
      .promise().done(function() { // used as a callback function for animate
          ShowPreviousTabBtn();
          ShowNextTabBtn();
        });
    });

  }


);

我希望这对你有用:)

【讨论】:

  • 非常感谢,能不能把它放到plunker上,在我的环境下不行。我必须对窗口调整大小做出反应,来自 Angular 的这段代码可以封装它:angular.element($window).bind('resize', function () { });
  • Prev 下一个不工作,我已将其更改为($scrollwidthtotal &lt;= $scrolledwidth),现在可以工作了。请您更新您的答案,以便我将其标记为正确吗?谢谢!
  • 好的,它完全可以工作,谢谢!在任何人哭泣之前,现在我必须将所有内容都带入表单,正如 Angular 通常所期望的那样。 Angular 中的 DOM 操作必须清楚地发生在指令中。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-07
  • 1970-01-01
  • 2016-01-31
  • 1970-01-01
  • 1970-01-01
  • 2018-10-05
相关资源
最近更新 更多