blogSite

我是谁?我在哪儿?我在干什么?

View project on GitHub

噢 一个例子


// 记录当前窗口是否被关闭的状态
var createJSPanelP;

/**
 * {
 *      "DisplayName": "提示位置",
 *      "DefaultValue": "默认提示信息",
 *      "ClassficationInfos": [
 *          {
 *              "DimensionName": "归类维度名称",
 *              "ClassficationName": "类别名称",
 *              "ElementInfos": [
 *                  {
 *                      "ElementName": "要素名称",
 *                      "LearningType": "学习类型:输入值提示/输入要素提示",
 *                      "PromptLevel": "提示等级:必填/推荐填写",
 *                      "PromptValue": "提示值"
 *                  }
 *              ]
 *          }
 *      ]
 *  }
 */
function showMLPromptInformation(obj)
{
    let titleStr = "<span class='ml-panel-title'>" + obj.DisplayName + " 输入提示:</span>";
    let contentStr = obj.DefaultValue;
    if (obj.ClassficationInfos != null && obj.ClassficationInfos.length > 0)
    {
        contentStr = "";
        obj.ClassficationInfos.forEach(element => {
            if (contentStr != "")
            {
                contentStr += "<br>";
            }
            // let DimensionName = element.DimensionName;
            let ClassficationName = element.ClassficationName;
            // contentStr += "<span class='ml-panel-title'>" + DimensionName + "维度下的" + ClassficationName + "分类</span>" + "<br>";
            contentStr += "<span class='ml-panel-tj-title'>(" + ClassficationName + "分类)</span>" + "<br>";
            let tempBT = ""; // 必填信息
            let tempTJ = ""; // 推荐填写信息
            element.ElementInfos.forEach(item => {
                let ElementName = " · " + item.ElementName;
                let LearningType = item.LearningType;
                let PromptLevel = item.PromptLevel;
                let PromptValue = item.PromptValue;
                if (PromptLevel == "必填")
                {
                    if (LearningType == "输入要素提示")
                    {
                        tempBT += ElementName + "(必填)" + "<br>";
                    }
                    else 
                    {
                        tempBT += PromptValue + "(必填)" + "<br>";
                    }
                }
                else
                {
                    if (LearningType == "输入要素提示")
                    {
                        tempTJ += ElementName + "(推荐)" + "<br>";
                    }
                    else 
                    {
                        tempTJ += PromptValue + "(推荐)" + "<br>";
                    }
                }
            })

            if (tempBT != "")
            {
                // contentStr += "<span class='ml-panel-bt-title'>必填信息</span>";
                // contentStr += "<br>";
                // contentStr += "<span class='ml-panel-bt'>" + tempBT + "</span>";
                contentStr += "<span class='ml-panel-bt'>" + tempBT + "</span>";
            }
            if (tempTJ != "")
            {
                // contentStr += "<span class='ml-panel-tj-title'>推荐输入信息</span>";
                // contentStr += "<br>";
                // contentStr += "<span class='ml-panel-tj'>" + tempTJ + "</span>";
                contentStr += "<span class='ml-panel-tj'>" + tempTJ + "</span>";
            }
        })
    }

    let ml_z_panel_bases = document.getElementById("ml_z_panel_bases");
    if (ml_z_panel_bases == undefined)
    {
        createZPanel();
        setTimeout(function() {
            createZPanelF(titleStr, contentStr); // 第一次,多一次。。。
        }, 800);
    }
    createZPanelF(titleStr, contentStr);
        
}

function createZPanel(){
    let workspace = document.getElementById("s4-workspace");
    let ml_z_panel_bases = document.getElementById("ml_z_panel_bases");
    if (ml_z_panel_bases == undefined)
    {
        ml_z_panel_bases = document.createElement('div');
        ml_z_panel_bases.id = 'ml_z_panel_bases';
        ml_z_panel_bases.className = 'ml_z_panel_bases  ml_z_panel_bases_big_width';
    }
    // 删除子节点
    let childNodesLen = ml_z_panel_bases.childNodes.length;
    for (let i = 0;i < childNodesLen; i++)
    {
        ml_z_panel_bases.removeChild(ml_z_panel_bases.childNodes[i]);
        i--;
        childNodesLen--;
    }
    // 添加子节点
    let tempXA = document.createElement('div');
    tempXA.id = 'div_xiaoao';
    tempXA.className = 'div_xiaoao'; // 静态图片/动态图片
    ml_z_panel_bases.appendChild(tempXA);
    tempXA.addEventListener("dblclick", basePanelDBClick);
    insertAfter(ml_z_panel_bases, workspace);
    workspace.style.position = "absolute"; // 为了悬浮!!!
    dragFunc("ml_z_panel_bases");

}
var createCount = 0;
// 创建提示信息
function createZPanelF(titleStr, contentStr)
{
    if (titleStr == undefined || titleStr == "" || contentStr == undefined || contentStr == "")
    {
        return;
    }
    createCount++;
    contentStr = "<span>" + titleStr + "</span><br>" + contentStr;
    let ml_z_panel_bases = document.getElementById("ml_z_panel_bases");
    // 在小奥图标前插入
    ml_z_panel_bases.parentNode.insertBefore(createMLZPanel(contentStr), ml_z_panel_bases);
    if (ml_z_panel_bases.firstChild.className == "div_xiaoao_little")
    {
        let rootPanelDiv = document.getElementById("ml_z_panel_root");
        if  (rootPanelDiv != undefined)
        {
            rootPanelDiv.style.display = "none";
        }
    }
    else 
    {
        setZpanelContentPosition();
    }

}
// 背景云朵图片的宽度和高度
var bkImgWidth = 198;
var bkImgHeight = 182;
let basewidthyd = 25;
// 设置位置
function setZpanelContentPosition(again) {
    // 设置位置 根据输入框变动
    // debugger
    // 提示文字的根div
    let rootPanelDiv = document.getElementById("ml_z_panel_root");
    if (rootPanelDiv != undefined)
    {
        // 解决初始化的时候云朵显示异常的问题
        if (createCount == 1)
        {
            rootPanelDiv.style.display = "none";
        }
        else if (imgType)
        {
            rootPanelDiv.style.display = "inherit";
        }
        // 修改背景图片div的宽度和高度
        let ml_z_panel_bases = document.getElementById("ml_z_panel_bases");
        let pw = ml_z_panel_bases.offsetLeft;
        let ph = ml_z_panel_bases.offsetTop;
        let bkW = rootPanelDiv.clientWidth + basewidthyd;
        let bkH = Math.ceil((bkW / bkImgWidth) * bkImgHeight);
        rootPanelDiv.firstChild.style.width = bkW + "px";
        rootPanelDiv.firstChild.style.height = bkH + "px";
        // 设置文本框div距离背景框顶部的距离
        // let ydContentHeight = rootPanelDiv.firstChild.clientHeight;
        let h1 = rootPanelDiv.childNodes[0].clientHeight;
        let h2 = rootPanelDiv.childNodes[1].clientHeight;
        // if (ydContentHeight > 0)
        if (h1 > 0)
        {
            // var marginTops = Math.ceil((ydContentHeight - rootPanelDiv.clientHeight) / 2.2);
            let marginTops = Math.ceil((h1 - h2) / 3.2);
            rootPanelDiv.childNodes[1].style.marginTop = marginTops + "px"; // 设置内部文字距离顶部的高度
        }
        // 设置显示文本的根div距离左侧位置
        rootPanelDiv.style.left = (pw - basewidthyd - rootPanelDiv.clientWidth) + "px";
        // 设置显示文本的根div距离顶部位置
        if (rootPanelDiv.childNodes[0].clientHeight == 0)
        {
            rootPanelDiv.style.top = (ph - basewidthyd - rootPanelDiv.clientHeight) + "px";
        }
        else 
        {
            rootPanelDiv.style.top = (ph + 65 - rootPanelDiv.childNodes[0].clientHeight) + "px";
        }
    }
    // 初始化显示欢迎信息 start
    // 您好
    // 很高兴为您服务
    // createCount++; 
    // 初始化显示欢迎信息 end
    if (createCount == 2) //处理显示异常
    {
        setZpanelContentPosition();
    }
    if (again != undefined && again == "again")
    {
        setZpanelContentPosition();
    }
}

var imgType = true; // true : 大;false : 小
// 小奥图标panel距离左上的距离
var styleLeft = "";
var styleTop = "";
// 图标双击变大缩小
function basePanelDBClick() {
    // 小奥图片
    let div_xiaoao = document.getElementById("div_xiaoao");
    // 提示文字
    let rootPanelDiv = document.getElementById("ml_z_panel_root");
    if (imgType)
    {
        // debugger
        div_xiaoao.parentNode.className = 'ml_z_panel_bases ml_z_panel_bases_min_width';
        styleLeft = div_xiaoao.parentNode.style.left;
        div_xiaoao.parentNode.style.left = "";
        styleTop = div_xiaoao.parentNode.style.top;
        div_xiaoao.parentNode.style.top = "";
        removeDragFunc("ml_z_panel_bases");
        // div_xiaoao.className = 'div_xiaoao_little';
        if (rootPanelDiv != undefined)
        {
            rootPanelDiv.style.display = "none";
            window.getSelection().empty();
        }
        imgType = false;
    }
    else 
    {
        // debugger
        div_xiaoao.parentNode.className = 'ml_z_panel_bases ml_z_panel_bases_big_width';
        div_xiaoao.parentNode.style.left = styleLeft;
        div_xiaoao.parentNode.style.top = styleTop;
        dragFunc("ml_z_panel_bases");
        // div_xiaoao.className = 'div_xiaoao';
        if (rootPanelDiv != undefined)
        {
            rootPanelDiv.style.display = "inherit";
            window.getSelection().empty();
            setZpanelContentPosition("again"); // 重新设置位置
        }
        imgType = true;
    }
}
// 在元素后添加元素
function insertAfter(newElement, targentElement) {
    var parent = targentElement.parentNode;
    if (parent.lastChild == targentElement) {
        parent.appendChild(newElement);
    } else {
        parent.insertBefore(newElement, targentElement.nextSibling)
    }
}
// 拖拽
function dragFunc(id) {
    var Drag = document.getElementById(id);
    Drag.onmousedown = function(event) {
        var ev = event || window.event;
        event.stopPropagation();
        event.preventDefault();
        var disX = ev.clientX - Drag.offsetLeft;
        var disY = ev.clientY - Drag.offsetTop;
        document.onmousemove = function(event) {
            var ev = event || window.event;
            Drag.style.left = ev.clientX - disX + "px";
            Drag.style.top = ev.clientY - disY + "px";
            Drag.style.cursor = "move";
            setZpanelContentPosition();
        };
    };
    Drag.onmouseup = function() {
        document.onmousemove = null;
        this.style.cursor = "default";
    };
}
// 取消拖拽
function removeDragFunc(id) {
    var Drag = document.getElementById(id);
    Drag.onmousedown = function(event) {
        return false;
    };
    Drag.onmouseup = function() {
        return false;
    };
}

function createMLZPanel(contentStr)
{
    let rootPanelDiv = document.getElementById("ml_z_panel_root");
    if (rootPanelDiv == undefined)
    {
        rootPanelDiv = document.createElement("div");
        rootPanelDiv.id = 'ml_z_panel_root';
        rootPanelDiv.className = "ml_z_panel_root";
    }
    // 删除子节点
    let childNodesLen = rootPanelDiv.childNodes.length;
    for (let i = 0;i < childNodesLen; i++)
    {
        rootPanelDiv.removeChild(rootPanelDiv.childNodes[i]);
        i--;
        childNodesLen--;
    }

    // yd content
    let ml_z_yd_content = document.createElement("div");
    ml_z_yd_content.id = "ml_z_yd_content";
    ml_z_yd_content.className = "ml_z_yd_content";
    rootPanelDiv.appendChild(ml_z_yd_content);

    // content
    let ml_z_panel_content = document.createElement("div");
    ml_z_panel_content.className = "ml_z_panel_content";


    let ml_panel_text = document.createElement("div");
    ml_panel_text.className = 'ml_z_panel_text';
    // ml_panel_text.innerHTML = "aaaa:bbbb:cccc:" + (++i);
    ml_panel_text.innerHTML = contentStr;
    ml_z_panel_content.appendChild(ml_panel_text)


    let ml_z_panel_content_border = document.createElement("div");
    ml_z_panel_content_border.className = 'ml_z_panel_content_border';
    ml_z_panel_content.appendChild(ml_z_panel_content_border)

    rootPanelDiv.appendChild(ml_z_panel_content);

    return rootPanelDiv;
}
/* 提示信息 */
.ml-panel-title{
    color: black;
    font-size: 12px;
    font-weight: bold;
}
.ml-panel-tj-title,.ml-panel-bt-title {
    font-size: 12px;
    color: blue;
}
.ml-panel-tj{
    font-size: 12px;
    /* color: blueviolet; */
    color: black;
}
.ml-panel-bt{
    font-size: 12px;
    color: red;
}

/* zpanel */
.ml_z_panel_root{
    /* margin-top: 12px;
    margin-bottom: 25px; */
    position: absolute;
    /* right: 20px;
    bottom: 0px; */
    /* width: 300px; */
    float: right;
    background-image: "../../../../../images/xiaoaoYdContent.png";
}
.ml_z_yd_content {
    /* content: url("../../../../../images/xiaoaoYdContent.png"); */
    width: 160px;
    background: url("../../../../../images/xiaoaoYdContent.png") no-repeat;
    height: 180px;
    background-size: cover;
    float: right;
    z-index: 1999;
    position: absolute;
}
.ml_z_panel_text {
    max-height: 95px;
    overflow-y: auto;
}
.ml_z_panel_content {
    float: right;
    display: inline-block;
    padding: 10px;
    border-radius: 4px;
    border-bottom-right-radius: 0px;
    z-index: 2000;
    font-size: 12px;
    /* border: 1px solid #303133; */
    /* background-color: chartreuse; */
    /* background-color: rgb(233, 230, 230); */
    background-color: white;
    position: relative;
    top: 15px;
    /* left: 12px; */
    /* max-width: 75%; */
    margin-top: 25px;
    margin-left: 27px;
    max-height: 160px;
    max-width: 200px;
}
.ml_z_panel_content .ml_z_panel_content_border {
    position: relative;
    right: -25px;
}
.ml_z_panel_bases {
    z-index: 9999;
    position: absolute;
    right: 20px;
    bottom: 5px;
    /*动画名称*/ 
    animation: wobble; 
    /*动画持续时间*/  
    animation-duration: 1s;
    /*针对webkit内核*/  
    -webkit-animation:wobble 1s;

}
.ml_z_panel_bases_big_width {
    width: 135px;
    height: 145px;
}
.ml_z_panel_bases_min_width {
    width: 75px;
    height: 80px;
}
.div_xiaoao {
    /* 静态图片 */
    /* content: url("../../../../../images/bigxiaoao.png"); */
    /* 动态图片 */
    /* content: url("../../../../../images/xiaoaogif.gif"); */

    content: url("../../../images/bigxiaoao.png");
    width: 100%;
    background-image: url("../../../../../images/bigxiaoao.png");
    height: 100%;
    background-size: cover;
    background-repeat: no-repeat;
}

@keyframes wobble {
    0% { transform: translateX(0%); }
    15% { transform: translateX(-25%) rotate(-5deg); }
    30% { transform: translateX(20%) rotate(3deg); }
    45% { transform: translateX(-15%) rotate(-3deg); }
    60% { transform: translateX(10%) rotate(2deg); }
    75% { transform: translateX(-5%) rotate(-1deg); }
    100% { transform: translateX(0%); }
}

@-webkit-keyframes wobble {
    0% { -webkit-transform: translateX(0%); }
    15% { -webkit-transform: translateX(-25%) rotate(-5deg); }
    30% { -webkit-transform: translateX(20%) rotate(3deg); }
    45% { -webkit-transform: translateX(-15%) rotate(-3deg); }
    60% { -webkit-transform: translateX(10%) rotate(2deg); }
    75% { -webkit-transform: translateX(-5%) rotate(-1deg); }
    100% { -webkit-transform: translateX(0%); }
}

参考文档

首页 > 学习总览 > 开发语言 > JavaScript