在众多事件中,angular 1.x对于scroll事件好像并不咋地,但是最近项目上要用到这玩意儿,

所以就自己写了一个,那么下面来说一下我的思路

先说一下功能的需求吧

一个div里面包了很多个div,外面的div是可以的滚动的,

而根据滚动到不同的区块时,每个内在的div要浮现出一块部分

然后说一下我的思路:

1.获取每一个悬浮模块的高度 -- divHeight

2.将所有高度累加成一个新的数组 -- heightArr

3.获取当前屏幕的滚动高度 -- scrollHeight

4.比较divHeight处于heightArr的哪个区间内

5.将处于的该区域内的div悬浮出来

那么接下来就看代码,为了方便使用,我们可以用指令

<div my-scroll>
  <div>1</div>
  <div>2</div>
  <div>3</div>
</div>

然后我们来做指令

angular.module('myScroll',[],angular.noop).directive('myScroll',function(){
  var obj = {};
  obj = {
    restrict: 'A',link: function(scope,elem,attr){
      //获取当前屏幕滚动所至的模块
      var getTopLength = function(lens,scrollTop){
        for(var i = 0; i < lens.length; i++){
         if(scrollTop < val){
           return i
         }
        }
      };

      //设置悬浮模块
      var setFloat = function(scrollIndex){
        scope[scrollIndex] = true;
      };

      //获取每个模块的高度
      var getDivHeight = function(){
        var arr = [];
        elem.children.map(function(ele,ind){
          scope[ind] = false;
          arr.push($(ele)[0].offsetHeight);  
        });
        return arr;
      };

      //获取累加的模块高度
      var getLensAdd = function(arr){
        var lens = [];
        arr.reduce(function(oval,nVal,index,array){
          lens.push(oval+nVal);
          return (oval+nVal);
        },0);
      };
      
      //绑定滚动事件
      elem.bind('scroll',function(e){
        //获取当前屏幕的top已经滚动的距离
        var scrollTop = e.currentTarget.scrollTop;
        var arr = getDivHeight();
        var lens = getLensAdd(arr);
        //设置一个初始值
        var scrollIndex = -1;
        //获取当前滚动所至模块值
        var scrollIndex = getTopLength();
        setFloat(scrollIndex);
      });
    };
  };
  return obj;
})

ok,就是这样按照我的想法实现啦

angular 自定义 scroll事件的更多相关文章

  1. ios – UIScrollView自动滚动64点

    我正在将UIScrollView添加到UIViewControllers视图中.出于某种原因,在将滚动视图添加到视图并显示之间,contentOffset设置为{0,-64},64是状态栏的20加上导航栏的44点(我猜).下面是一些重现问题的代码和图像.如何阻止iOS设置contentOffset?

  2. swift详解之十八------------ScrollView

    ScrollView注:本小节详细介绍scrollView的用法UIScrollView是一个能够滚动的视图控件,可以用来展示大量的内容,并且可以通过滚动查看所有的内容UIScrollView的用法,将需要展示的内容添加到UIScrollView中设置UIScrollView的contentView属性,告诉UIScrollView所有内容的尺寸这里我创建了一个scrollview并设置的一些属性,然后添加了四个小狗的图片。下面看看uiscrollviewdelegate中的一些其他的事件这里面都清楚的记

  3. 使用SnapKit约束label、scrollview和tableview

    解决的方法是,在其中加一个viewContainer,让scrollview的contentSize.height自适应viewContainer,而viewContainer的高度自适应与其中的各个控件。重点内容都在代码里:三、约束UITableViewCell基于上面的方法,这个就比较简单了,以前苦逼的计算每个cell的高度/(ㄒoㄒ)/~~在这里可以直接把Cell当做上面的viewContainer就好了。重点是UITableView的属性设置:内容大概就这么多吧,别急着赶路,把路填平了,才能跑起来

  4. Android Studio是否支持用于Android UI设计的AngularJS?

    我对AndroidStudio有疑问:AS在设计XML文件时是否支持AngularJS代码,例如:对于小动画或效果?

  5. Android – 显示/隐藏片段留下空白区域

    鉴于:>屏幕上有两个垂直放置的元素(ViewPager和Fragment)>第一个当前选定片段(ViewFlipper)中的操作在顶部片段中基于文本和基于WebView的视图之间切换,并隐藏/显示底部片段.观测到的:>隐藏底部片段会留下底部片段所在的空白区域.我尝试了Relative和LinearLayout(顶部片段设置为weight=1)但是底部片段被移除后都没有效果我底部仍然有空的空间这是顶

  6. Android工具栏collapseMode问题

    我有一个问题是“带有标题文本的工具栏”在CollapsingToolbarLayout中向上滚动时不折叠.我尝试了一些调整,使用app:layout_collapseMode=“none”作为我的android.support.v7.widget.Toolbar中的属性,但它不起作用.也许我的布局有问题.以下是我想要实现的目标.但是当我滚动到顶部时,工具栏也会折叠,并且tabBar也会向内滚动,并

  7. android – OnGestureListener#onScroll未在三星Galaxy Note 10.1上从GestureDetector调用

    在带有Android4.0.4的三星galaxyNote10.1上,当两个手指放在屏幕上时,GestureDetector不会触发OnGestureListener#onScroll.这适用于其他设备.在我的应用程序中,我想只在涉及至少两个手指时启用滚动.这是重现现象的视图实现:这种行为是已知/记录/想要的吗?有没有已知的解决方法?

  8. android – 如何使用ClientID和ClientSecret在Phonegap中使用Angularjs登录Google OAuth2

    我正尝试使用Angularjs(使用IonicFramework)通过GoogleOAuth2从我的Phonegap应用程序登录.目前我正在使用http://phonegap-tips.com/articles/google-api-oauth-with-phonegaps-inappbrowser.html进行登录.但是当我使用Angular-UI-RouterforIonic时,它正在创建非常

  9. android – CollapsingToolbarLayout ImageView不可滚动

    使用cheesesquare–androidsupportlibraryexample是否可以使HeaderImageView可滚动?请注意,我已经添加了添加android:fillViewport=“true”到nestedScrollView并添加了app:layout_scrollFlags=“scroll”toImageView但是当试图从ImageView滚动时没有任何反应.解决方法好的

  10. android – webview迫使我的scrollview到底

    我在滚动视图中有一个webview,当Activity加载时,一旦webview完成“loadData”,它就会强制我的滚动视图到底部.我如何防止这种情况发生?我试过这个,但它上下跳动屏幕,我不想要:解决方法fhucho的答案可以阻止webview从滚动到底部.但是你会失去轨迹球等所有的可访问性.所以我发现了一个改进:希望能帮助到你!

随机推荐

  1. Angular2 innerHtml删除样式

    我正在使用innerHtml并在我的cms中设置html,响应似乎没问题,如果我这样打印:{{poi.content}}它给了我正确的内容:``但是当我使用[innerHtml]=“poi.content”时,它会给我这个html:当我使用[innerHtml]时,有谁知道为什么它会剥离我的样式Angular2清理动态添加的HTML,样式,……

  2. 为Angular根组件/模块指定@Input()参数

    我有3个根组件,由根AppModule引导.你如何为其中一个组件指定@input()参数?也不由AppModalComponent获取:它是未定义的.据我所知,你不能将@input()传递给bootstraped组件.但您可以使用其他方法来做到这一点–将值作为属性传递.index.html:app.component.ts:

  3. angular-ui-bootstrap – 如何为angular ui-bootstrap tabs指令指定href参数

    我正在使用角度ui-bootstrap库,但我不知道如何为每个选项卡指定自定义href.在角度ui-bootstrap文档中,指定了一个可选参数select(),但我不知道如何使用它来自定义每个选项卡的链接另一种重新定义问题的方法是如何使用带有角度ui-bootstrap选项卡的路由我希望现在还不算太晚,但我今天遇到了同样的问题.你可以通过以下方式实现:1)在控制器中定义选项卡href:2)声明一个函数来改变控制器中的散列:3)使用以下标记:我不确定这是否是最好的方法,我很乐意听取别人的意见.

  4. 离子框架 – 标签内部的ng-click不起作用

    >为什么标签标签内的按钮不起作用?>但是标签外的按钮(登陆)工作正常,为什么?>请帮我解决这个问题.我需要在点击时做出回复按钮workingdemo解决方案就是不要为物品使用标签.而只是使用divHTML

  5. Angular 2:将值传递给路由数据解析

    我正在尝试编写一个DataResolver服务,允许Angular2路由器在初始化组件之前预加载数据.解析器需要调用不同的API端点来获取适合于正在加载的路由的数据.我正在构建一个通用解析器,而不是为我的许多组件中的每个组件设置一个解析器.因此,我想在路由定义中传递指向正确端点的自定义输入.例如,考虑以下路线:app.routes.ts在第一个实例中,解析器需要调用/path/to/resourc

  6. angularjs – 解释ngModel管道,解析器,格式化程序,viewChangeListeners和$watchers的顺序

    换句话说:如果在模型更新之前触发了“ng-change”,我可以理解,但是我很难理解在更新模型之后以及在完成填充更改之前触发函数绑定属性.如果您读到这里:祝贺并感谢您的耐心等待!

  7. 角度5模板形式检测形式有效性状态的变化

    为了拥有一个可以监听其包含的表单的有效性状态的变化的组件并执行某些组件的方法,是reactiveforms的方法吗?

  8. Angular 2 CSV文件下载

    我在springboot应用程序中有我的后端,从那里我返回一个.csv文件WheniamhittingtheURLinbrowsercsvfileisgettingdownloaded.现在我试图从我的角度2应用程序中点击此URL,代码是这样的:零件:服务:我正在下载文件,但它像ActuallyitshouldbeBook.csv请指导我缺少的东西.有一种解决方法,但您需要创建一个页面上的元

  9. angularjs – Angular UI-Grid:过滤后如何获取总项数

    提前致谢:)你应该避免使用jQuery并与API进行交互.首先需要在网格创建事件中保存对API的引用.您应该已经知道总行数.您可以使用以下命令获取可见/已过滤行数:要么您可以使用以下命令获取所选行的数量:

  10. angularjs – 迁移gulp进程以包含typescript

    或者我应该使用tsc作为我的主要构建工具,让它解决依赖关系,创建映射文件并制作捆绑包?

返回
顶部