javascript - 如何仅使用上面的 div 和下面的 div 动态更新 div 的最大高度?

标签 javascript jquery html css angularjs

我正在使用 twitter bootstrap、angular 和 jquery 来尝试解决这个问题。

我有一个左侧的 div,里面还有 4 个其他的 div。这个左侧的 div 宽度为 300 像素,高度为 100%。

第一个 div 开始时是隐藏的,并且可以更改大小,因为它显示三种不同的错误消息之一,以及用户所做的选择。这个 div 有一个 ng-show 属性以及它的一些子元素上的 ng-show 属性。

第二个 div 和第四个 div 的大小始终相同。第四个 div 始终位于底部。

第三个 div 里面有一个表格。我想在此表上设置一个最大高度,以便我可以仅在此 div 上设置 overflow-y:auto。

有没有办法观察第二个 div 的底部,以便计算可用高度?

我有这段代码,但是,它在 ng-show 完成之前执行,所以大部分时间都是错误的:

app.directive('adjustTableHeight', ['$window', function($window) {
    return {
        restrict: 'A',
        link: function(scope, element) {
            var w = angular.element($window);
            scope.getUpperDivBottom = function () {
                var upperDiv = angular.element('#secondDiv'),
                    upperDivBottom = upperDiv && upperDiv.length ? (upperDiv.position().top + upperDiv.outerHeight(true)) : 0;
                return Math.round(upperDivBottom);
            };
            scope.$watch(scope.getUpperDivBottom, function (newValue, oldValue) {
                var lowerDiv = angular.element('#fourthDiv'),
                    lowerDivTop = lowerDiv && lowerDiv.length ? lowerDiv.position().top : 0;
                console.log('upperDivBottom', newValue, oldValue);
                console.log('lowerDivTop', lowerDivTop);
                console.log('height', Math.round(lowerDivTop) - newValue);
                element.css('max-height', Math.round(lowerDivTop) - newValue);
            }, true);
            w.on('resize', _resize);
            scope.$on('$destroy', function() {
                w.off('resize', _resize);
            });
            function _resize() {
                scope.$apply();
            };
        }
    };
}]);

最佳答案

所以,我遇到的问题是我试图监控 angular 无法控制的元素,例如 div 的位置。一旦我修改了代码以观察正在变化的范围变量并添加了 $timeout,我就不再遇到所有问题并且一切都开始正常运行。

scope.$watchGroup(['item1, 'item2'],
    function(newValues, oldValues, scope) {
        $timeout(function() {
           setMaxHeight();
        }, 0);
    }
);

关于javascript - 如何仅使用上面的 div 和下面的 div 动态更新 div 的最大高度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26769115/

相关文章:

javascript - 如何检查函数是否是非阻塞的?

jquery - Rails 5,jQuery,将事件添加到动态创建的元素

html 从剪贴板副本中排除文本

jquery - bootstrap 3 下拉菜单和轮播

javascript - 在提交表单之前,显示在表单中输入的数据

javascript - GraphQL 和 Hibernate (ORM)

javascript - 在完成加载之前如何制作图像,AJAX jQuery

javascript - chrome 扩展没有运行搜索到 divs jquery 代码

javascript - 通过 Rotten Tomatoes API 检索电影

javascript - 将两个请求集成到一个 Javascript 中