ABI-DEMO第八期导航页:自定义酷屏组件

1626
0

前端小姐姐 小试身手Lv3

发表于2020-11-3 15:09

楼主
本帖最后由 前端小姐姐 于 2020-11-10 10:04 编辑

一、页面效果图


二、页面可改变的内容包括:
1、大标题文字(ABI 一站式数据分析平台1)、logo图片,在属性面板改
2、中间3个正方体上的文字(功能演示1、行业案例1、用户试用1,对应左侧3个导航的文字,对应在取数设置面板改
3、以及中间每个正方体周围对应的文字和描述、链接,对应在取数设置面板改


三、组件整体js代码:
var name = null;
var title1 = null;
var title2 = null;
var title3 = null;
var text1 = null;
var text2 = null;
var text3 = null;
var href1 = null;
var href2 = null;
var href3 = null;
/*
* 初始化方法
*
* @params cwidget 组件对象
* @params vardata 取数定义中定义的变量,json格式:{'var1':'xxx'}
* @params storagedata 组件自己需要存储的值,字符串格式
* @params events 事件,用户在右边属性上设置的事件, json格式:{'evt1': function(){...}, 'evt2':function(){....}}
* @params resources 资源及权限校验,json格式:{'resids': ['EBI$12$xxx$1$xxx.rpttpl','EBI$12$xxx$1$xxx.coolrpt'], 'pms': [true, false]}
*/
function init(cwidget, vardata, events, storagedata, resources){
    var basedom = cwidget.basedom;

    //标题
    var title = cwidget.getProperty("title");
    $(basedom).find('h3.headlines').text(title || "标题");

    //logo
    var logo = cwidget.getProperty("logo");
    if (logo) {
        setProperty('logo', logo, cwidget);
    }

    basedom.onclick = events.evt1;
    if(cwidget.isresultview){
        //只在结果界面的时候执行,例如只想在结果界面绑定click事件
    }

    _initData(vardata);
    _initDom(cwidget);
}

/**
* 定义了自定义属性时,必须实现该方法,方法名为setProperty
* 当在属性面板上修改属性后,会调用该方法
* @param key  属性名
* @param value  属性值
* @param cwidget  组件对象
* @returns
*/
function setProperty(key, value, cwidget) {
    if (key === 'title') {
            //修改属性大标题时,触发
        $(cwidget.basedom).find('h3.headlines').text(value);
    } else if (key === 'logo') {
            //修改属性logo时,触发
        setLogo(cwidget, value);
    }
}

/**
* 初始化数据,并检查
*/
function _initData(vardata){
    try {
        if (vardata.name) {
            name = eval(vardata.name);
        } else {
           name = [];
        }
        if (vardata.title1) {
           title1 = eval(vardata.title1);
        } else {
           title1 = [];
        }
        if (vardata.title2) {
           title2 = eval(vardata.title2);
        } else {
           title2 = [];
        }
        if (vardata.title3) {
           title3 = eval(vardata.title3);
        } else {
           title3 = [];
        }
        if (vardata.text1) {
           text1 = eval(vardata.text1);
        } else {
           text1 = [];
        }
        if (vardata.text2) {
           text2 = eval(vardata.text2);
        } else {
           text2 = [];
        }
        if (vardata.text3) {
           text3 = eval(vardata.text3);
        } else {
           text3 = [];
        }
        if (vardata.href1) {
           href1 = eval(vardata.href1);
        } else {
           href1 = [];
        }
        if (vardata.href2) {
           href2 = eval(vardata.href2);
        } else {
           href2 = [];
        }
        if (vardata.href3) {
           href3 = eval(vardata.href3);
        } else {
           href3 = [];
        }
        } catch (e) {
                EUI.showError(e);
        }
}

/**
* 初始化dom结构
*/
function _initDom(cwidget){
     var basedom = cwidget.basedom;
    //中间正方体文字
     var listCenter = $(basedom).find(".center").children('li');
     var listNav = $(basedom).find(".left-nav").children('li');
     for (var i = 0; i < name.length; i++) {   
        $(listCenter).find("span").html(name);
        $(listNav).html(name);
     }
    //中间正方体四周圆的标题和描述文字
    var listTitle = $(basedom).find(".around").children('li');
    for (var j = 0; j < title1.length; j++) {  
        $(listTitle[0]).append('<dl><a href='+href1[j]+' target="blank"><dt></dt><dd><h6>'+title1[j]+'</h6><p>'+text1[j]+'</p></dd></a></dl> ');
     }
    for (var k = 0; k < title2.length; k++) {  
        $(listTitle[1]).append('<dl><a href='+href2[k]+' target="blank"><dt></dt><dd><h6>'+title2[k]+'</h6><p>'+text2[k]+'</p></dd></a></dl> ');
     }
    for (var h = 0; h < title3.length; h++) {  
        $(listTitle[2]).append('<dl><a href='+href3[k]+' target="blank"><dt></dt><dd><h6>'+title3[h]+'</h6><p>'+text3[h]+'</p></dd></a></dl> ');
     }

    //获取子元素添加类
    $(".around li").each(function(index) {
          var len = $(this).children('dl').length;  
          $(this).addClass(function() {
                return "aroundWz" + len;
         });
    });

    //默认给ul的第一个li添加active
    $('.center').children('li').first().addClass("active").siblings().removeClass("active");
    $('.around').children('li').first().addClass("active").siblings().removeClass("active");
    $('.left-nav').children('li').first().addClass("active").siblings().removeClass("active");

}

/**
* 用于设置区域传入的图片路径
*/
function setLogo(cwidget, value){
     $(cwidget.basedom).find('.logo').find('img').attr("src",value);   
}
                    
//切换效果
function clickSwitch(ele1,ele2){
          $(ele1).each(function(index) {
                      $(this).click(function() {
                            $(".center li:eq(" + index + ")").addClass("active").siblings().removeClass("active");
                            $(".left-nav li:eq(" + index + ")").addClass("active").siblings().removeClass("active");
                            $(".around li:eq(" + index + ")").addClass("active move").siblings().removeClass("active move");
                                        $(ele2).attr("class", "center").addClass(function() {
                                                   return "active" + (index+1);
                                        });
                         });
                  });
}
                        
clickSwitch( $(".center li"),$(".center") );
clickSwitch( $(".left-nav li"),$(".center") );


/**
* 刷新操作,数据改变时,调用该方法,重新渲染数据
* @param cwidget 组件对象
* @param vardata 取数定义中定义的变量,json格式:{'var1':'xxx'}
* @param storagedata  组件自己需要存储的值,字符串格式
* @returns
*/
function refreshDatas(cwidget, vardata, storagedata){
    var basedom = cwidget.basedom;

}

/**
* 组件大小改变时执行
* @param cwidget 组件对象
* @returns
*/
function resize(cwidget){

    //针对不同屏幕缩放
    var basedom = cwidget.basedom,
          screenWidth = $(window).width(),
          zoom = screenWidth / 1920;
    $(basedom).css({
          "zoom":zoom
    });
    $(basedom).parent().parent().css({
          "overflow":"hidden"
    });
}

/**
* 获取组件的参数值
* @param cwidget 组件对象
* @returns
*/
function getValue(cwidget){

}

/**
* 获取组件的参数名称
* @param cwidget 组件对象
* @returns
*/
function getParamName(cwidget){

}

/*
* 销毁操作,销毁自己相关的东西
*/
function dispose(cwidget){

}

1、和title相关代码是实现更改大标题文字(ABI 一站式数据分析平台1)和logo相关代码是实现更改logo图片;
//标题
    var title = cwidget.getProperty("title");
    $(basedom).find('h3.headlines').text(title || "标题");

//logo
    var logo = cwidget.getProperty("logo");
    if (logo) {
        setProperty('logo', logo, cwidget);
    }



function setProperty(key, value, cwidget) {
    if (key === 'title') {
            //修改属性大标题时,触发
        $(cwidget.basedom).find('h3.headlines').text(value);
    } else if (key === 'logo') {
            //修改属性logo时,触发
        setLogo(cwidget, value);
    }
}

/**
* 用于设置区域传入的图片路径
*/
function setLogo(cwidget, value){
     $(cwidget.basedom).find('.logo').find('img').attr("src",value);   
}


这4段代码是实现属性面板去更改大标题和logo图片


2、和name相关代码是实现更改中间3个正方体和对应左侧3个导航上的文字;第一个正方体四周圆对应的标题title1、描述text1文字以及链接href1;第二个正方体四周圆对应的标题title2、描述text2文字以及链接href2;;第三个正方体四周圆对应的标题title3、描述text3文字以及链接href3;需要注意的点是3个值对应的个数要保持一致。
var name = null;
var title1 = null;
var title2 = null;
var title3 = null;
var text1 = null;
var text2 = null;
var text3 = null;
var href1 = null;
var href2 = null;
var href3 = null;

/**
* 初始化数据,并检查
*/
function _initData(vardata){
    try {
        if (vardata.name) {
            name = eval(vardata.name);
        } else {
           name = [];
        }
        if (vardata.title1) {
           title1 = eval(vardata.title1);
        } else {
           title1 = [];
        }
        if (vardata.title2) {
           title2 = eval(vardata.title2);
        } else {
           title2 = [];
        }
        if (vardata.title3) {
           title3 = eval(vardata.title3);
        } else {
           title3 = [];
        }
        if (vardata.text1) {
           text1 = eval(vardata.text1);
        } else {
           text1 = [];
        }
        if (vardata.text2) {
           text2 = eval(vardata.text2);
        } else {
           text2 = [];
        }
        if (vardata.text3) {
           text3 = eval(vardata.text3);
        } else {
           text3 = [];
        }
        if (vardata.href1) {
           href1 = eval(vardata.href1);
        } else {
           href1 = [];
        }
        if (vardata.href2) {
           href2 = eval(vardata.href2);
        } else {
           href2 = [];
        }
        if (vardata.href3) {
           href3 = eval(vardata.href3);
        } else {
           href3 = [];
        }
        } catch (e) {
                EUI.showError(e);
        }
}

/**
* 初始化dom结构
*/
function _initDom(cwidget){
     var basedom = cwidget.basedom;
    //中间正方体文字
     var listCenter = $(basedom).find(".center").children('li');
     var listNav = $(basedom).find(".left-nav").children('li');
     for (var i = 0; i < name.length; i++) {   
        $(listCenter).find("span").html(name);
        $(listNav).html(name);
     }
    //中间正方体四周圆的标题和描述文字
    var listTitle = $(basedom).find(".around").children('li');
    for (var j = 0; j < title1.length; j++) {  
        $(listTitle[0]).append('<dl><a href='+href1[j]+' target="blank"><dt></dt><dd><h6>'+title1[j]+'</h6><p>'+text1[j]+'</p></dd></a></dl> ');
     }
    for (var k = 0; k < title2.length; k++) {  
        $(listTitle[1]).append('<dl><a href='+href2[k]+' target="blank"><dt></dt><dd><h6>'+title2[k]+'</h6><p>'+text2[k]+'</p></dd></a></dl> ');
     }
    for (var h = 0; h < title3.length; h++) {  
        $(listTitle[2]).append('<dl><a href='+href3[k]+' target="blank"><dt></dt><dd><h6>'+title3[h]+'</h6><p>'+text3[h]+'</p></dd></a></dl> ');
     }  
}


上边代码是实现取数面板去更改中间3个正方体以及对应左侧3个导航上的文字和中间每个正方体周围圆对应的文字和描述、链接






最近看过此主题的会员

txl

wangtongxue

Lyle_

xyr

18715311272

迷途小生

jqnanjiong

槐序

ken_liang

ysy123

adhzh

小亿

jiangqiao

shuzy

divinehe

好学

POLARIS

0个回答

只看楼主

登录后可回答问题,请登录注册

快速回复 返回顶部 返回列表

小时

全天响应

分钟

快速处理问题

工程师强势助力

明星产品
解决方案
联系合作

渠道咨询电话:137-0120-6790

技术支持QQ:400-0011-866(工作日9:00-18:00)

产品建议邮箱yixin@esensoft.com

关注我们

扫TA学习更多干货

一对一专家交流

版权所有© 2006-2024 北京亿信华辰软件有限责任公司 京ICP备07017321号 京公网安备11010802016281号