2017-05-19 24 views
9

Tôi đang sử dụng GetOrgChart để tạo biểu đồ tổ chức cho công ty của mình, nhưng tôi đã gặp phải một vấn đề nhỏ.Thêm thanh cuộn vào thùng chứa svg

Nếu SVG lớn hơn vùng chứa, chúng tôi muốn thêm thanh cuộn để bạn có thể sử dụng thanh cuộn để cuộn vì thao tác này sẽ nhanh hơn rất nhiều so với kéo chuột bằng tất cả.

Tôi đã thử điều này example nhưng không thể làm cho nó hoạt động.

Có cách nào để đạt được những gì tôi đang tìm kiếm không?

Ví dụ bên dưới là cách nhỏ hơn biểu đồ thực tế của chúng tôi, nhưng nó phải đủ tốt để đại diện cho vấn đề.

var peopleElement = document.getElementById("people"); 
 
var orgChart = new getOrgChart(peopleElement, { 
 
    primaryFields: ["name", "title", "phone", "mail"], 
 
    photoFields: ["image"], 
 
    scale: 0.4, 
 
    dataSource: [{ 
 
     id: 1, 
 
     parentId: null, 
 
     name: "Amber McKenzie", 
 
     title: "CEO", 
 
     phone: "678-772-470", 
 
     mail: "[email protected]", 
 
     adress: "Atlanta, GA 30303", 
 
     image: "images/f-11.jpg" 
 
    }, 
 
    { 
 
     id: 2, 
 
     parentId: 1, 
 
     name: "Ava Field", 
 
     title: "Paper goods machine setter", 
 
     phone: "937-912-4971", 
 
     mail: "[email protected]", 
 
     image: "images/f-10.jpg" 
 
    }, 
 
    { 
 
     id: 3, 
 
     parentId: 1, 
 
     name: "Evie Johnson", 
 
     title: "Employer relations representative", 
 
     phone: "314-722-6164", 
 
     mail: "[email protected]", 
 
     image: "images/f-9.jpg" 
 
    }, 
 
    { 
 
     id: 4, 
 
     parentId: 1, 
 
     name: "Paul Shetler", 
 
     title: "Teaching assistant", 
 
     phone: "330-263-6439", 
 
     mail: "[email protected]", 
 
     image: "images/f-5.jpg" 
 
    }, 
 
    { 
 
     id: 11, 
 
     parentId: 1, 
 
     name: "Paul Shetler", 
 
     title: "Teaching assistant", 
 
     phone: "330-263-6439", 
 
     mail: "[email protected]", 
 
     image: "images/f-5.jpg" 
 
    }, 
 
    { 
 
     id: 12, 
 
     parentId: 1, 
 
     name: "Paul Shetler", 
 
     title: "Teaching assistant", 
 
     phone: "330-263-6439", 
 
     mail: "[email protected]", 
 
     image: "images/f-5.jpg" 
 
    }, 
 
    { 
 
     id: 5, 
 
     parentId: 2, 
 
     name: "Rebecca Francis", 
 
     title: "Welding machine setter", 
 
     phone: "408-460-0589", 
 
     image: "images/f-4.jpg" 
 
    }, 
 
    { 
 
     id: 6, 
 
     parentId: 2, 
 
     name: "Rebecca Randall", 
 
     title: "Optometrist", 
 
     phone: "801-920-9842", 
 
     mail: "[email protected]", 
 
     image: "images/f-8.jpg" 
 
    }, 
 
    { 
 
     id: 7, 
 
     parentId: 2, 
 
     name: "Spencer May", 
 
     title: "System operator", 
 
     phone: "Conservation scientist", 
 
     mail: "[email protected]", 
 
     image: "images/f-7.jpg" 
 
    }, 
 
    { 
 
     id: 8, 
 
     parentId: 6, 
 
     name: "Max Ford", 
 
     title: "Budget manager", 
 
     phone: "989-474-8325", 
 
     mail: "[email protected]", 
 
     image: "images/f-6.jpg" 
 
    }, 
 
    { 
 
     id: 9, 
 
     parentId: 7, 
 
     name: "Riley Bray", 
 
     title: "Structural metal fabricator", 
 
     phone: "479-359-2159", 
 
     image: "images/f-3.jpg" 
 
    }, 
 
    { 
 
     id: 10, 
 
     parentId: 7, 
 
     name: "Callum Whitehouse", 
 
     title: "Radar controller", 
 
     phone: "847-474-8775", 
 
     image: "images/f-2.jpg" 
 
    } 
 
    ] 
 
}); 
 

 
$('.get-left,.get-down,.get-up,.get-right').remove(); 
 

 
$(document).ready(function() { 
 
    $(".get-oc-c").css("overflow","scroll"); 
 
})
#people { 
 
    width: 90%; 
 
    height: 90%; 
 
    border:1px solid #000; 
 
}
<link href="http://www.getorgchart.com/GetOrgChart/getorgchart/getorgchart.css" rel="stylesheet" /> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="http://www.getorgchart.com/GetOrgChart/getorgchart/getorgchart.js"></script> 
 
<div id="people"></div>

Trả lời

6

Bạn có thể có một cái nhìn tại this jsfiddle. Các .get-oc-c chứa cho thấy thanh cuộn nếu cần thiết:

.get-oc-c { 
    overflow: auto !important; 
} 

và các yếu tố biểu đồ SVG được gói trong một div đó là thay đổi kích cỡ để chứa đầy đủ các biểu đồ:

function wrapChart() { 
    ... 
    $("svg").wrap("<div id='svgContainer'></div>"); 
    ... 
} 

#svgContainer { 
    overflow: visible; 
} 

Phương pháp wrapChart được gọi trong updatedEvent. Các tùy chọn biểu đồ di chuyển bị vô hiệu hóa để loại bỏ các mũi tên ở hai bên và để ngăn chặn panning:

var orgChart = new getOrgChart(peopleElement, { 
    enableMove: false, 
    ... 
}); 

Màn hình hiển thị ban đầu dường như làm việc nhưng nhận được các giá trị kích thước chính xác cho các yếu tố wrapper là khó khăn (biểu thức được sử dụng trong jsfiddle là rất thực nghiệm), và nó trở nên phức tạp hơn khi cửa sổ được thay đổi kích thước, khi các liên kết được mở rộng/thu gọn và khi biểu đồ được phóng to. Một số thay đổi kích thước sử dụng hình ảnh động, vì vậy các tính toán sẽ phải tính đến độ trễ trước khi nhận được giá trị cuối cùng.

jsfiddle cho thấy một số mã đơn giản để khôi phục vị trí cuộn sau khi mở rộng/thu hẹp các nút nhưng cần được cải thiện. Tôi đã không viết mã vào tài khoản để thay đổi kích thước cửa sổ và để phóng to.

Với số lượng công việc cần thiết để làm cho thanh cuộn hoạt động chính xác, có lẽ tốt hơn nên sử dụng tính năng di chuyển và di chuyển do thành phần cung cấp. Bạn cũng có thể liên hệ với người tạo thành phần và yêu cầu họ thêm tùy chọn thanh cuộn.

2

Các quy tắc css quan trọng còn thiếu ở đây là:

max-heightoverflow-y

overflow-y nên được thiết lập để tự động và max-height lên một tầm cao SVG nên không bao giờ chéo (đó là chiều cao, chúng tôi sẽ kích hoạt thanh cuộn)

Phương pháp tiếp cận 'tĩnh' sẽ là sử dụng truy vấn phương tiện để đặt kích thước mong đợi cho các màn hình khác nhau sẽ kích hoạt thanh cuộn phù hợp với các kích thước đó. Tất nhiên nó có thể không hoạt động tốt nếu khách hàng là trên một kích thước bạn không nghĩ đến.

Cá nhân tôi sẽ khuyên bạn nên sử dụng plugin cuộn để xử lý phản hồi/tự động thay đổi kích thước để hiển thị thanh cuộn khi cần thiết.CSS được xây dựng theo kiểu truyền thống để hỗ trợ nội dung HTML tĩnh nhưng những ngày này, chúng tôi có rất nhiều nội dung động (không phải từ phía máy chủ) và nó luôn luôn là một nhức đầu để bắt và sửa chữa tất cả các vấn đề. ví dụ. sự xuất hiện của thanh cuộn có thể làm cho chiều rộng của DOM thay đổi nhưng không có cách nào để xem nó qua CSS. Cũng trong một số trình duyệt, thanh cuộn truyền thống là chất béo không cần thiết.

Một số plugin ví dụ bao gồm:

Các vấn đề liên quan