• 手写横向滚动条与时间轴


    前提:今天在做页面的时候,有个页面原型是一条时间轴,而且横向展示,不可以换行,超出时候不用浏览器自带的overflow:auto所产生的滚动条,而是需要类似轮播图的左右按钮一样,实现时间轴的横向滚动。

    ps:下面的代码用到了jquery和angular。

    /* css样式部分 */
    <style>
        .risk-report {
            padding: 10px;
            background: #fff;
        }
        /* 圈线 */
        .risk-report .slider-box {
            display: inline-block;
        }
    
        .risk-report .slider-box .circle {
            width: 8px;
            height: 8px;
            float: left;
            border: 2px solid #ddd;
            border-radius: 50%;
            box-sizing: border-box;
        }
    
        .risk-report .slider-box .line {
            width: 200px;
            height: 2px;
            float: left;
            background: #ddd;
            position: relative;
            top: 3px;
        }
    
        .risk-report .slider-box .active.circle {
            border-color: #4686F2;
        }
    
        .risk-report .slider-box .active.line {
            background: #4686F2;
        }
    
        /* 时间轴 */
        .risk-report .time-axis-wrap {
            position: relative;
        }
    
        .risk-report .time-axis-content {
            white-space: nowrap;
            overflow: hidden;
            /* 去除inline-block的间隙 */
            font-size: 0;
            -webkit-text-size-adjust: none;
        }
    
        .risk-report .time-axis-content .time-axis-item {
            display: inline-block;
            font-size: 12px;
            color: #333333;
            text-align: left;
            line-height: 20px;
            font-family: PingFangSC-Medium;
            white-space: normal;
            width: 208px;
            vertical-align: top;
            overflow: hidden;
        }
    
        .risk-report .time-axis-content .time-axis-item .time-axis-item-time {
            font-family: PingFangSC-Regular;
            padding-right: 10px;
        }
    
        .risk-report .time-axis-wrap .scroll-btn {
            width: 30px;
            height: 30px;
            background: #DDDDDD;
            color: #fff;
            line-height: 30px;
            text-align: center;
            font-size: 20px;
            border-radius: 4px;
            position: absolute;
            /* top: 7px; */
            top: 50%;
            margin-top: -15px;
            -webkit-user-select: none;
            -moz-user-select: none;
            -ms-user-select: none;
            user-select: none;
            display: none;
        }
    
        .risk-report .time-axis-wrap:hover .scroll-btn {
            display: block;
        }
    
        .risk-report .time-axis-wrap .scroll-btn.left-scroll-btn {
            left: 0;
        }
    
        .risk-report .time-axis-wrap .scroll-btn.right-scroll-btn {
            right: 0;
        }
    
        .risk-report .time-axis-wrap .scroll-btn:hover {
            background: #aaa;
            cursor: pointer;
        }
    </style>
    <!--  html部分 -->
    <div class="risk-report" ng-controller="riskReportController">
        <div class="time-axis-wrap">
            <div class="time-axis-content">
                <div class="time-axis-item" ng-repeat="item in timeAxisData track by $index">
                    <div class="time-axis-item-time">{{item.time}}</div>
                    <div class="slider-box">
                        <div class="circle"></div>
                        <div class="line" ng-show="{{$index !== timeAxisData.length-1}}"></div>
                    </div>
                    <div class="time-axis-item-tip" style="padding-right:10px;">{{item.tip}}</div>
                    <div class="time-axis-item-status" style="padding-right:10px;">{{item.status}}</div>
                </div>
            </div>
            <div class="left-scroll-btn scroll-btn" ng-click="leftScroll()">< </div>
            <div class="right-scroll-btn scroll-btn" ng-click="rightScroll()">></div>
        </div>
    
    </div>
    js部分
     // 时间轴的数据
    $scope.timeAxisData = [
                {
                            time: "1-20170101",
                            tip: "预警后,回访确认",
                            status: "无危险"
                        },
                        {
                            time: "2-20180101",
                            tip: "预警后,回访确认",
                            status: "无危险"
                        },
                        {
                            time: "3-20170101",
                            tip: "预警后,回访确认",
                            status: "无危险"
                        },
                        {
                            time: "4-20170101",
                            tip: "预警后,回访确认",
                            status: "无危险"
                        },
                        {
                            time: "至今",
                            tip: "",
                            status: ""
                        }
                    ];
           $scope.scrollLeft = 0;// 时间轴初始左侧滚动距离
           // 左移
                $scope.leftScroll = function () {
                    if ($scope.scrollLeft <= 0) {
                        $scope.scrollLeft = 0;
                        return;
                    }
                    var timeAxisContentScrollWidth = document.querySelector(".time-axis-content").scrollWidth;
                    var timeAxisContentOffsetWidth = document.querySelector(".time-axis-content").offsetWidth;
                    var dHeight = timeAxisContentScrollWidth - timeAxisContentOffsetWidth;
                    if ($scope.scrollLeft > dHeight) {
                        $scope.scrollLeft = dHeight;
                    }
                    // 每次减少100
                    $scope.scrollLeft -= 100;
                    $(".time-axis-content").scrollLeft($scope.scrollLeft);
                };
                // 右移
                $scope.rightScroll = function () {
                    var timeAxisContentScrollWidth = document.querySelector(".time-axis-content").scrollWidth;
                    var timeAxisContentOffsetWidth = document.querySelector(".time-axis-content").offsetWidth;
                    var dHeight = timeAxisContentScrollWidth - timeAxisContentOffsetWidth;
                    if ($scope.scrollLeft > dHeight) {
                        $scope.scrollLeft = dHeight;
                        return;
                    }
                    if ($scope.scrollLeft <= 0) {
                        $scope.scrollLeft = 0;
                    }
                    // 每次减少100
                    $scope.scrollLeft += 100;
                    $(".time-axis-content").scrollLeft($scope.scrollLeft);
                };

  • 相关阅读:
    ASP.NET MVC : 实现我们自己的视图引擎
    [转] 理解 JavaScript 闭包
    郁闷的disabled
    ASP.NET MVC 使用Post, Redirect, Get (PRG)模式
    获取窗口 高 、宽 的JS代码
    javaScript 中的return和return false
    一种标记是否为AJAX异步请求的思路
    ASP.NET MVC 源码更新预览
    [译]用Visual Studio2012来开发SQL Server 2012商业智能项目
    玩玩Windows Azure
  • 原文地址:https://www.cnblogs.com/grow-up-up/p/12853175.html
Copyright © 2020-2023  润新知