zoukankan      html  css  js  c++  java
  • angularJs自定义指令(directive)实现滑块滑动

    最近老大让我一个效果实现在页面某一部分内滑块随着滚动条上下滑动,说明一下我们项目使用技术angularJs.大家都知道,使用jquery很好实现。

    那么angular如何实现呢,我用的是自定义指令(directive)。

    1.下面是我html部分代码,detail-scroll是我自定义的标签

    ...............
    <div id="time"  style="position: relative;">
          <div ng-style="maskStyle" detail-scroll style="transition: all linear 0.5s;-moz-transition:all linear 0.5s;-webkit-transition: all linear 0.5s;-o-transition: all linear 0.5s;">
                <div ng-click="maskTimeDetail()">
                      <i class="zmdi zmdi-zoom-in"  style="font-size: 22px;color: #fff;padding: 5px;"></i>
                 </div>
           </div>
        <div class="tl-item alt" ng-repeat="time in timeList">
          //.....................
        </div> 
    </div>

    2.开始写js代码

    这里假设我们在某一个module下,控制器叫做AppCtrl

    angular.module('xxxx',[ ])
    .controller('AppCtrl', ['$scope',AppCtrl])
    .directive('detailScroll',function(){
    //       返回一个函数
        return{
            link : function($scope,element,attr){
                var container = angular.element(window);
                var timeH = $('#time').offset().top;//获取该部分距离页面顶部距离
                container.on('scroll', function() {
                    if(container.scrollTop()>timeH){
                        $scope.maskStyle.top = container.scrollTop()-timeH+$('#time .alt').eq(0).height()/2+'px';
                    }
                });
            },
            restrict:'A', //ECMA    E元素 C类名 M注释 A属性
        };
    });
    function AppCtrl($scope) {
        //这是我给这个滑块定义的样式,一定要记住你要相对应你的父级元素相对定位,
        //因为我们要改变是它的top值
        $scope.maskStyle={
             '30px',height: '30px',
            'background-color': '#ea1c0d',
            'z-index': 999,
            position: 'absolute',
            top:0,left:0,
            opacity:'0.8',
            'text-align':'center'
        };
    }
    detailScroll是 angular命名规范,驼峰式,一定要这样写,angular只有用自定义指令,才可以用jquery的一些方法。。
    以上只是个简单的例子来演示一下,如果滑块移动的top值不准确,可以自行计算。

    这只是简单的自定义指令写法,还有一个是可以引入模板

     angular.module('app', [])

      .directive('myDirective', function() {
        function appCtrl($scope){
          //处理逻辑
        }

         return {

         restrict: 'EA',

         replace: true,
        scope:{
          //想要从父级controller传到这里的函数,对象,变量,分别用(&,=,@),具体怎么用大家可以参考angular官网详解
        }
        templateUrl:'路径或是html拼接的字符串',

         controller: function($scope, $element, $attrs, $transclude) { // 控制器逻辑 }
        //controller这样写也可以,还有一种直接写controller名,通过注入的方法,比如
        controller:['$scope',appCtrl]

      } })

    可以参考这个https://segmentfault.com/a/1190000005851663,很详细~~~

  • 相关阅读:
    HttpModule与HttpHandler详解
    未能加载文件或程序集“Microsoft.ReportViewer.WebForms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”或它的某一个依赖项。
    javascript的escape()函数
    温故知新 javascript 正则表达式
    大爽Python入门教程 53 文件读写
    大爽Python入门教程 62 变量进阶 局部变量`local`与全局变量`global`
    大爽Python入门教程 61 变量进阶 可变`mutable`、不可变`immutable`
    大爽Python入门教程 57 思路与答案
    大爽Python入门教程 65 函数进阶 内置函数(Builtin Functions)
    大爽Python入门教程 55 实践演示 控制台版本——简易成绩管理系统
  • 原文地址:https://www.cnblogs.com/shixy1617/p/7428957.html
Copyright © 2011-2022 走看看