【问题标题】:AngularJS: Prevent page scrolling when scrolling a DIV elementAngularJS:滚动 DIV 元素时防止页面滚动
【发布时间】:2015-09-22 10:33:31
【问题描述】:

AngularJS中滚动DIV元素时如何防止页面滚动?

阅读此JQuery answer 后,我想在 AngularJS 指令 中应用相同的内容,但我不知道如何...有什么建议吗?

JQuery 中的示例: http://jsfiddle.net/XNwbt/458/

$( '.scrollable' ).bind( 'mousewheel DOMMouseScroll', function ( e ) {
    var e0 = e.originalEvent,
    delta = e0.wheelDelta || -e0.detail;

    this.scrollTop += ( delta < 0 ? 1 : -1 ) * 30;
    e.preventDefault();
});

谢谢!


编辑:

我尝试在 AngularJS 中做同样的事情,但 DIV 元素永远不会滚动...

'use strict';

angular
    .module('core')
    .directive('preventScrollBody', preventScrollBody);

function preventScrollBody() {
    return{
        link: link,
        restrict: 'A'
    };

    function link(scope, element, attrs) {
        element.bind( 'mousewheel DOMMouseScroll', function ( e ) {
            var e0 = e.originalEvent,
                delta = e0.wheelDelta || -e0.detail;

            this.scrollTop += ( delta < 0 ? 1 : -1 ) * 30;
            e.preventDefault();
        });
    }
}

【问题讨论】:

  • 所以最好制作指令customscroll并将此代码放入链接功能。 (将 $( '.scrollable' ) 替换为 args 中的元素)应该可以工作,恕我直言
  • 刚刚编辑了问题。我尝试在 Angular 中做同样的事情,但没有用。 (添加问题中的代码)

标签: angularjs scroll scrollbar


【解决方案1】:

至少在我的 chrome 中工作:

function link(scope, element, attrs) {
    element.bind( 'mousewheel DOMMouseScroll', function ( e ) {
      console.log(e);
        var e0 = e;//.originalEvent,
        var delta = e0.wheelDelta || -e0.detail;

        this.scrollTop += ( delta < 0 ? 1 : -1 ) * 30;
        e.preventDefault();
    });
}

http://plnkr.co/edit/sZFvgIyt9l9SZjQtTkH2?p=preview

【讨论】:

  • 太棒了!这在 plnkr 中对我有用,但我复制并粘贴到我的项目中并且不起作用。也许是 Angular 版本?您使用的是 Angular 1.4,而我使用的是旧版本的 Angular 1.2……嗯,我不明白!哈哈!谢谢大家!
  • 它确实有效,但你能解释一下你为什么评论//.originalEvent吗?
  • 太好了,完美运行!只需在要应用它的 html 元素上调用 prevent-scroll-body :)
【解决方案2】:

使用 Petr 的出色答案,我已经替换了行

    var delta = e0.wheelDelta || -e0.detail;

    var delta = e0.originalEvent.wheelDelta || -e0.detail;

而且效果很好。 所以修改后的函数是

    function link(scope, element, attrs) {
      element.bind( 'mousewheel DOMMouseScroll', function ( e ) {

        var e0 = e;
        var delta = e0.originalEvent.wheelDelta || -e0.detail;

        this.scrollTop += ( delta < 0 ? 1 : -1 ) * 30;
        e.preventDefault();
      });

}

【讨论】:

    【解决方案3】:

    事件参数“e” - 包含滚动事件对象,可让您防止页面滚动,当它在 div ('.scrollable') 上滚动时,如下所示

    event.preventDefault();
    

    【讨论】:

    • 我了解 JQuery 的工作原理。我的问题是如何在 angularJS 指令中做同样的事情
    猜你喜欢
    • 1970-01-01
    • 2011-11-27
    • 1970-01-01
    • 2016-12-29
    • 1970-01-01
    • 2013-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多