电子看板页面初步搭建
|
|
@ -0,0 +1,138 @@
|
||||||
|
html {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
margin: 0;
|
||||||
|
font-family: "Alibaba PuHuiTi R";
|
||||||
|
height: 98%;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 去除百度地图的水印和logo */
|
||||||
|
.BMap_cpyCtrl,
|
||||||
|
.anchorBL {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.layout {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
#main-box {
|
||||||
|
position: relative;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
padding: 0 1% 0 1%;
|
||||||
|
box-sizing: border-box;
|
||||||
|
background-color: #fff;
|
||||||
|
border-radius: 5px;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
#map-box {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.scroll-box,
|
||||||
|
.legend-box {
|
||||||
|
position: absolute;
|
||||||
|
background: rgba(0, 0, 0, 0.5);
|
||||||
|
color: #fff;
|
||||||
|
z-index: 999;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 左上角滚动盒子 */
|
||||||
|
.scroll-box {
|
||||||
|
top: 15px;
|
||||||
|
left: 15px;
|
||||||
|
width: 460px;
|
||||||
|
height: 180px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.scroll-box-title,
|
||||||
|
.scroll-box-content {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.scroll-box-title {
|
||||||
|
height: 30px;
|
||||||
|
line-height: 30px;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.scroll-box-content {
|
||||||
|
height: 150px;
|
||||||
|
/* overflow-y: auto; */
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.flex-box {
|
||||||
|
padding: 6px 0;
|
||||||
|
display: flex;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.flex-box span:first-child {
|
||||||
|
width: 20%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.flex-box span:nth-child(2) {
|
||||||
|
width: 30%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.flex-box span:last-child {
|
||||||
|
width: 50%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.flex-box span {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content-item {
|
||||||
|
border-bottom: 1px solid rgb(45, 187, 223);
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content-item span {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content-item span i {
|
||||||
|
padding: 1px 0;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 左下角图例 */
|
||||||
|
.legend-box {
|
||||||
|
bottom: 15px;
|
||||||
|
left: 15px;
|
||||||
|
width: 140px;
|
||||||
|
height: 252px;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: space-around;
|
||||||
|
border-radius: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.legend-box .legend-item {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-around;
|
||||||
|
font-size: 13px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.legend-box .legend-item img {
|
||||||
|
width: 18px;
|
||||||
|
height: 18px;
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 3.3 KiB |
|
After Width: | Height: | Size: 3.3 KiB |
|
After Width: | Height: | Size: 3.0 KiB |
|
After Width: | Height: | Size: 9.7 KiB |
|
After Width: | Height: | Size: 2.8 KiB |
|
After Width: | Height: | Size: 3.3 KiB |
|
After Width: | Height: | Size: 9.9 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
|
@ -0,0 +1,221 @@
|
||||||
|
const map = new BMapGL.Map("map-box"); // 创建Map实例
|
||||||
|
map.centerAndZoom(new BMapGL.Point(116.404, 39.915), 11); // 初始化地图,设置中心点坐标和地图级别
|
||||||
|
map.enableScrollWheelZoom(true); //开启鼠标滚轮缩放
|
||||||
|
|
||||||
|
// 获取左上角滚动数据源
|
||||||
|
function getScrollData() {
|
||||||
|
const scrollData = [
|
||||||
|
{
|
||||||
|
name: "跨线路",
|
||||||
|
location: "N11-N12999",
|
||||||
|
content: [
|
||||||
|
{
|
||||||
|
name: "垂直净度",
|
||||||
|
value: "9896",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "垂直净度",
|
||||||
|
value: "9896",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "垂直净度",
|
||||||
|
value: "9896",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "跨越地点",
|
||||||
|
location: "N11-N12336",
|
||||||
|
content: [
|
||||||
|
{
|
||||||
|
name: "垂直净度",
|
||||||
|
value: "9896",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "垂直净度",
|
||||||
|
value: "9896",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "垂直净度",
|
||||||
|
value: "9896",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "跨越地点",
|
||||||
|
location: "N11-N128885",
|
||||||
|
content: [
|
||||||
|
{
|
||||||
|
name: "垂直净度",
|
||||||
|
value: "9896",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "垂直净度",
|
||||||
|
value: "9896",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "垂直净度",
|
||||||
|
value: "9896",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "跨越地点",
|
||||||
|
location: "N11-N128773",
|
||||||
|
content: [
|
||||||
|
{
|
||||||
|
name: "垂直净度",
|
||||||
|
value: "9896",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "垂直净度",
|
||||||
|
value: "9896",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "垂直净度",
|
||||||
|
value: "9896",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
let scrollBox = $(".content-wrapper");
|
||||||
|
let innerHtml = "";
|
||||||
|
scrollData.forEach((item, index) => {
|
||||||
|
// 跨域描述内容
|
||||||
|
let describeHtml = "";
|
||||||
|
if (item.content && item.content.length > 0) {
|
||||||
|
item.content.forEach((d, dIndex) => {
|
||||||
|
describeHtml += `<i>${d.name}:${d.value}</i>`;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// 单行数据
|
||||||
|
innerHtml += `<div class="flex-box content-item">
|
||||||
|
<span>${item.name}</span>
|
||||||
|
<span>${item.location}</span>
|
||||||
|
<span>${describeHtml}</span>
|
||||||
|
</div>`;
|
||||||
|
});
|
||||||
|
scrollBox.html(innerHtml);
|
||||||
|
}
|
||||||
|
|
||||||
|
getScrollData();
|
||||||
|
|
||||||
|
document.addEventListener("DOMContentLoaded", function () {
|
||||||
|
const scrollContent = document.getElementById("scrollContent");
|
||||||
|
const originalContent = scrollContent.querySelector(".content-wrapper");
|
||||||
|
const cloneContent = scrollContent.querySelector(".clone-content");
|
||||||
|
|
||||||
|
// 克隆原始内容到克隆容器
|
||||||
|
cloneContent.innerHTML = originalContent.innerHTML;
|
||||||
|
|
||||||
|
// 设置滚动动画
|
||||||
|
let scrollPosition = 0;
|
||||||
|
const scrollSpeed = 20; // 滚动速度(像素/秒)
|
||||||
|
let lastTimestamp = 0;
|
||||||
|
|
||||||
|
function animateScroll(timestamp) {
|
||||||
|
if (!lastTimestamp) lastTimestamp = timestamp;
|
||||||
|
const deltaTime = timestamp - lastTimestamp;
|
||||||
|
lastTimestamp = timestamp;
|
||||||
|
|
||||||
|
// 计算新的滚动位置
|
||||||
|
scrollPosition += (scrollSpeed * deltaTime) / 1000;
|
||||||
|
|
||||||
|
// 获取内容总高度
|
||||||
|
const contentHeight = originalContent.scrollHeight;
|
||||||
|
|
||||||
|
// 当滚动到克隆内容的开始时,重置位置以实现无缝衔接
|
||||||
|
if (scrollPosition >= contentHeight) {
|
||||||
|
scrollPosition = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 应用滚动
|
||||||
|
scrollContent.scrollTop = scrollPosition;
|
||||||
|
|
||||||
|
// 继续动画
|
||||||
|
requestAnimationFrame(animateScroll);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 启动动画
|
||||||
|
requestAnimationFrame(animateScroll);
|
||||||
|
|
||||||
|
// 鼠标悬停时暂停滚动
|
||||||
|
scrollContent.addEventListener("mouseenter", function () {
|
||||||
|
scrollSpeed = 0;
|
||||||
|
});
|
||||||
|
|
||||||
|
scrollContent.addEventListener("mouseleave", function () {
|
||||||
|
scrollSpeed = 30; // 恢复原始速度
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// 获取左下角图例数据源
|
||||||
|
function getLegendData() {
|
||||||
|
const legendData = [
|
||||||
|
{
|
||||||
|
name: "基础开挖",
|
||||||
|
value: "6",
|
||||||
|
icon: "../../img/digitalSignage/yellow.png",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "开挖完成",
|
||||||
|
value: "6",
|
||||||
|
icon: "../../img/digitalSignage/green.png",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "浇筑完成",
|
||||||
|
value: "6",
|
||||||
|
icon: "../../img/digitalSignage/blue.png",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "铁塔组立",
|
||||||
|
value: "6",
|
||||||
|
icon: "../../img/digitalSignage/orange.png",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "组塔完成",
|
||||||
|
value: "6",
|
||||||
|
icon: "../../img/digitalSignage/zt_red.png",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "架线完成",
|
||||||
|
value: "6",
|
||||||
|
icon: "../../img/digitalSignage/zt_purple.png",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "附件安装",
|
||||||
|
value: "6",
|
||||||
|
icon: "../../img/digitalSignage/zt_green.png",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "未 开 始",
|
||||||
|
value: "6",
|
||||||
|
icon: "../../img/digitalSignage/white.png",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "索道运输",
|
||||||
|
value: "6",
|
||||||
|
icon: "../../img/digitalSignage/sd.png",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "项 目 部",
|
||||||
|
value: "6",
|
||||||
|
icon: "../../img/digitalSignage/yellow.png",
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
const legendBox = $(".legend-box");
|
||||||
|
let innerHtml = "";
|
||||||
|
legendData.forEach((item, index) => {
|
||||||
|
innerHtml += `<div class="legend-item">
|
||||||
|
<img src="${item.icon}" alt="">
|
||||||
|
<span>${item.name}</span>
|
||||||
|
<span>${item.value}</span>
|
||||||
|
</div>`;
|
||||||
|
});
|
||||||
|
legendBox.html(innerHtml);
|
||||||
|
}
|
||||||
|
|
||||||
|
getLegendData();
|
||||||
|
|
@ -0,0 +1,67 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<link rel="stylesheet" href="../../js/layui-v2.9.14/layui/css/layui.css">
|
||||||
|
<link rel="stylesheet" href="../../css/font.css">
|
||||||
|
<link rel="stylesheet" href="../../css/table-common2.css">
|
||||||
|
<link rel="stylesheet" href="../../css/synthesisQuery/digitalSignage.css">
|
||||||
|
<script src="../../js/libs/jquery-3.7.0.min.js" charset="UTF-8" type="text/javascript"></script>
|
||||||
|
<script src="../../js/layui-v2.9.14/layui/layui.js" charset="UTF-8" type="text/javascript"></script>
|
||||||
|
<script src="../../js/publicJs.js"></script>
|
||||||
|
<script src="../../js/commonUtils.js"></script>
|
||||||
|
<script src="../../js/openIframe.js"></script>
|
||||||
|
<script src="../../js/my/aes.js"></script>
|
||||||
|
<script src="../../js/ajaxRequest.js"></script>
|
||||||
|
<script type="text/javascript" src="//api.map.baidu.com/api?type=webgl&v=1.0&ak=cClgLBaLgGUdQDilX9dGvieL"></script>
|
||||||
|
<title>电子看板</title>
|
||||||
|
|
||||||
|
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div id="main-box">
|
||||||
|
<!-- 地图容器 -->
|
||||||
|
<div id="map-box"></div>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- 左上角滚动盒子 -->
|
||||||
|
<div class="scroll-box">
|
||||||
|
<div class="scroll-box-title flex-box">
|
||||||
|
<span>跨域类型</span>
|
||||||
|
<span>跨越地点</span>
|
||||||
|
<span>跨域描述</span>
|
||||||
|
</div>
|
||||||
|
<div class="scroll-box-content" id="scrollContent">
|
||||||
|
<!-- 原始内容 -->
|
||||||
|
<div class="content-wrapper">
|
||||||
|
<!-- <div class="flex-box content-item">
|
||||||
|
<span>跨线路</span>
|
||||||
|
<span>N15-N16</span>
|
||||||
|
<span>
|
||||||
|
<i>垂直净度:7696</i>
|
||||||
|
<i>垂直净度:7696</i>
|
||||||
|
<i>垂直净度:7696</i>
|
||||||
|
</span>
|
||||||
|
</div> -->
|
||||||
|
</div>
|
||||||
|
<!-- 克隆内容用于无缝衔接 -->
|
||||||
|
<div class="content-wrapper clone-content">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 左下角图例 -->
|
||||||
|
<div class="legend-box">
|
||||||
|
<div class="legend-item">
|
||||||
|
<!-- <span>基础开挖</span>
|
||||||
|
<span>6</span> -->
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
<script src="../../js/synthesisQuery/digitalSignage.js" charset="UTF-8" type="text/javascript"></script>
|
||||||
|
|
||||||
|
</html>
|
||||||