javascript - 如何将 ngMouseMove 事件计算与我的 div 对齐

标签 javascript css angularjs onmousemove

我创建了一个自定义 slider ,您可以在下面的 fiddle 中看到它: http://jsfiddle.net/dorcohen/tf8aj7sj/

我正在尝试通过以下方式将鼠标光标与 ngMouseMouse movementX 元素对齐:

$scope.dragInProgress = function (event) {
    if ($scope.inProgress) { 
            $scope.level += Math.ceil(event.movementX);
        }
    };

问题是我无法理解如何将光标一直放在 div 上(考虑到移动方向和速度。

最佳答案

根据这个answer似乎(谢天谢地)无法更改鼠标指针位置。

但是我认为您是从错误的 Angular 来解决问题的。如果我没看错的话,保持指针位置与拖动 handle 同步的目的是让用户体验更愉快。

虽然缺少此类 DOM API,但有一个简单的解决方法。诀窍是在 document 级别附加 mousemove 事件,允许鼠标位置自由移动。

换句话说,您可以将 dragStarted 更改为:

var mousmove = function(event) {
    $scope.$apply(function() {
        $scope.dragInProgress(event);
    });
};
var target;
$scope.dragStarted = function(event) {
    target = event.target;
    $document[0].addEventListener('mousemove', mousmove);
    $scope.inProgress = true;
};

然后使用mousemove事件计算新的 slider 位置:

$scope.dragInProgress = function(event) {
    if ($scope.inProgress) {
        var markerBox = target.getBoundingClientRect();
        var containerBox = target.parentNode.getBoundingClientRect();
        var space = containerBox.width;
        var x = event.clientX;
        var percentage = (Math.min(Math.max(containerBox.left, x), containerBox.right) - containerBox.left) / space;
        $scope.level = percentage * 100;
    }
};

这是 an updated fiddle .

关于javascript - 如何将 ngMouseMove 事件计算与我的 div 对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34708545/

相关文章:

javascript - Angular : Uncaught ReferenceError: $cordovaSQLite is not defined

javascript - Javascript 中 jQuery 的 .before() 函数的等价物是什么?

javascript - 在没有 MV* 框架的情况下组织 jQuery AJAX

javascript - Rails 4 CoffeeScript 在预编译时不执行

html - Chrome 和 Safari 之间的 Css 悬停效果不同

javascript - Angular 和 ParseSDK Javascript CRUD 操作

javascript - 在 ReactJS 应用程序中加载全局 Bootstrap 配置

html - 为什么两个边框框 50% 的 div 不是并排的?

html - 调整窗口大小时(变小)防止 bootstrap 3 选项卡堆叠

javascript - NodeJS 登录后动态加载 Angular 模块