关于js设置标签样式来显示图片背景无效的解决方案

本文介绍了一个使用JavaScript实现的Tab面板切换功能,通过修改DOM元素的样式来实现内容的切换显示。文章详细展示了HTML结构和JavaScript代码,并提供了解决方案以确保每个Tab都能正确显示。
在页面里使用了切换效果。背景图片的显示是通过js来设置标签样式来控制的。但是写了没有效果。只能显示第一个tab的。

html:



  1. <div class="col"> 
  2. <div class="zynav" id="JY"> 
  3. <div class="z1 curr1"><a href="javascript:;"><span>骑士</span></a></div> 
  4. <div class="z2"><a href="javascript:;""><span>魔法师</span></a></div> 
  5. <div class="z3"><a href="javascript:;"><span>治愈师</span></a></div> 
  6. </div> 
  7. <div id="NS" class="dzylist qs mfs zys"> 
  8. <div class="info"> 
  9. 姓名: 吉克<br />  
  10. 年纪: 16岁<br /> 
  11. 身高: 175 CM<br /> 
  12. 职业: 骑士 <br /> 
  13. <strong>【故事】</strong> 受到父亲的影响,而努力朝骑士之路前进的吉克,有着男 
  14. 孩子率性认真的个性,勇敢投入冒险。当发现父亲留下的一张纸条, 
  15. 记载着不为人知的魔法讯息,他便踏上了寻找谜团之路,因而也遇上 
  16. 艾儿一行人,发展出吵吵闹闹的情愫… <br /> 
  17. <br /> 
  18. <strong>【特性】</strong> 身为骑士的吉克拥有较高的体力和防御力,是队伍中的坦 
  19. 克和压制战况的重要角色。他能使用各种强力的连续技来牵制敌人, 
  20. 技能特性包括:将敌人击飞、晕击、反击、攻击倒地的敌人等等。 
  21. 除了一般挡住敌人的攻势之外,使敌人失去攻击的能力也是他的强项。 
  22. </div> 
  23. <div class="info" style="display:none;"> 
  24. 姓名: 丹恩<br />  
  25. 年纪: 18岁 <br /> 
  26. 身高: 180 CM<br /> 
  27. 职业: 魔法师 <br /> 
  28. <strong>【故事】</strong> 虽然年轻,却已是国家魔法师团精英,常被指派去执行棘手的任务。有着一头金红发色的丹恩,散发独特的贵气,加上太过俊俏的脸庞,常让他受到太多打扰,因此总是披着披风,低调的执行任务。被公主艾儿跟上,这回他恐怕很难太潇洒…<br /> 
  29. <br /> 
  30. <strong>【特性】</strong> 身为魔法师的丹恩,擅长使用冰、火、地三种元素魔法,加上可以使用快捷键实时回魔,施展不同效果的魔法,制造出强大的伤害。技能效果包含了:远距离、范围、定身、持续伤害等等,可从容因应各种战况,是不可或缺的主攻击角色。 
  31.   
  32. </div> 
  33. <div class="info" style="display:none;"> 
  34. 姓名: 艾儿 <br />  
  35. 年纪: 16岁 <br />  
  36. 身高: 165 CM<br />  
  37. 职业: 治愈师 <br />  
  38. <strong>【故事】</strong>  身为路尼亚王国的小公主,心地善良而单纯,虽然有时也会带点傲慢,想要表现自己的能力,却常常被拿跟姊姊莉儿公主比较,带着委屈和冒险的心情出走。离开了皇宫的艾儿,展现了她过人的治愈魔力,守护着众人的生命…<br />  
  39. <br />  
  40. <strong>【特性】</strong>  唯一拥有治愈能力的角色,拥有各种治愈技巧:单体、范围、复活、解状态等技能,搭配好用的技能「月之奉献」,可以将血量转换为魔力,让艾儿成为出名的打不死。魔法攻击虽然不强,却常带有击退的特性,非常适合辅助队友。在后期更是闯关不可或缺的重要职业 
  41. </div> 
  42. </div> 
  43. <div class="clear"></div> 
  44. </div> 
js: 

通过切换 骑士,魔法师 ,治愈师 来控制<div id="NS" class="dzylist qs mfs zys">的样式。显示左边的图片。结果只有默认的 骑士才能显示。


  1. <script language="javascript"
  2. var Browser = {  
  3.  isIE:(navigator.userAgent.indexOf('MSIE') >= 0) && (navigator.userAgent.indexOf('Opera') < 0),  
  4.  isFirefox:navigator.userAgent.indexOf('Firefox') >= 0,  
  5.  isOpera:navigator.userAgent.indexOf('Opera') >= 0  
  6. }  
  7.   
  8.  var jy={ 
  9.     S_obj:null
  10.     D_obj:null,   
  11.     Num:0, 
  12.     ay:Array("qs","mfs","zys"), 
  13.    init:function() 
  14.    { 
  15.        this.S_obj=$("JY"); 
  16.        this.D_obj=$("NS");  
  17.        this.AddEventList();              
  18.        this.DisplayControl(this.S_obj,this.D_obj,0); 
  19.    }, 
  20.    DisplayControl:function(_Sobj,_Dobj,num) 
  21.    {    
  22.          
  23.         var oldnum=jy.Num; 
  24.         var j=jy.Num+1; 
  25.         var k=num+1; 
  26.         _Dobj.childNodes[oldnum].style.display="none"
  27.         _Sobj.childNodes[oldnum].className="z"+j;         
  28.           
  29.         _Dobj.className="dzylist "+ jy.ay[num];            
  30.         _Dobj.childNodes[num].style.display="block"
  31.         _Sobj.childNodes[num].className="z"+k+" curr"+k; 
  32.         jy.Num=num;   
  33.    }, 
  34.    AddEventList:function() 
  35.    {           
  36.          
  37.        for(i=0;i<this.S_obj.childNodes.length;i++) 
  38.        { 
  39.          var _objEvent=this.S_obj.childNodes;          
  40.          if(Browser.isIE) 
  41.          {             
  42.             _objEvent.attachEvent("onclick",new Function("jy.DisplayControl(jy.S_obj,jy.D_obj,"+i+")"));             
  43.          } 
  44.          else 
  45.          {             
  46.              //_objEvent.attachEventListener("click",function(){var n=i;jy.DisplayControl(jy.S_obj,jy.D_obj,n)}); 
  47.              _objEvent.attachEventListener("click",new Function("jy.DisplayControl(jy.S_obj,jy.D_obj,"+i+")")); 
  48.          } 
  49.        } 
  50.    }  
  51.  }  
  52.  jy.init(); 
  53. </script> 

问过一些资深的js专员都没有很好的解决方案。当时也就是想试试延迟执行代码来测试一下,看能不能达到想要的效果。

最后结果与预期的想法刚好。解决了我在写js代码控制样式这个一直存在的问题。


看个js代码:

    DisplayControl:function(_Sobj,_Dobj,num)
   {   
        //alert(num);  //设置标签样式加载图片,会导致没有图片显示。 解决方案延迟执行js代码
         setTimeout(function(){  
        var oldnum=jy.Num;
        var j=jy.Num+1;
        var k=num+1;
        _Dobj.childNodes[oldnum].style.display="none";
        _Sobj.childNodes[oldnum].className="z"+j;        
         
        _Dobj.className="dzylist "+ jy.ay[num];           
        _Dobj.childNodes[num].style.display="block";
        _Sobj.childNodes[num].className="z"+k+" curr

       },13);

}

<think>我们正在处理的是ECharts中标签重叠的问题。根据引用[1][2][3][4],我们可以总结出以下解决方案: 1. **调整饼图半径(radius)**:通过缩小饼图半径,为标签留出更多空间(引用[2])。 2. **设置最小角度(minAngle)**:避免扇区过小导致标签重叠(引用[2][3])。 3. **启用避免重叠属性(avoidLabelOverlap)**:该属性可自动调整标签位置(引用[2][3])。 4. **调整标签对齐方式(alignTo)**:可选择标签引导线末端对齐(labelLine)或文字对齐(edge)(引用[2])。 5. **自定义标签格式(formatter)**:通过换行或缩短文本来避免重叠(引用[2])。 6. **动态调整Y轴范围**:对于柱状图,通过设置Y轴的最小值和最大值来分散标签(引用[4])。 7. **手动设置标签位置(position)**:为每个数据点单独指定标签位置(引用[4])。 下面我们分别针对饼图和柱状图给出具体配置方法。 ### 一、饼图标签防重叠配置 ```javascript option = { series: [{ type: 'pie', radius: '50%', // 调整半径(引用[2]) minAngle: 5, // 设置最小角度(引用[3]) label: { show: true, avoidLabelOverlap: true, // 启用防重叠(引用[2][3]) alignTo: 'edge', // 对齐方式(引用[2]) formatter: function(params) { // 自定义格式(引用[2]) // 长文本换行处理 return params.name.split('').join('\n'); } }, data: [...] // 数据 }] }; ``` ### 二、柱状图标签防重叠配置 ```javascript option = { yAxis: { type: 'value', min: function(value) { // 动态设置Y轴最小值(引用[4]) return value.min - 1000; }, max: function(value) { // 动态设置Y轴最大值(引用[4]) return value.max + 1000; } }, series: [{ type: 'bar', label: { show: true, position: 'top', // 可设置为'top','insideTop'等 // 或者为每个数据点单独设置位置(引用[4]) formatter: function(params) { return params.value.toFixed(0); // 控制数值精度 } }, data: [...] // 数据 }] }; ``` ### 三、通用进阶技巧 1. **动态位置计算**: ```javascript position: function(point) { // 根据数据值动态调整标签位置 return [point[0], point[1] - 20]; } ``` 2. **条件样式控制**: ```javascript label: { show: true, formatter: function(params) { // 小数值数据特殊处理 return params.value > 10 ? params.value : ''; } } ``` 3. **使用富文本样式**: ```javascript rich: { small: { fontSize: 9, verticalAlign: 'bottom' } }, formatter: '{small|' + params.value + '}' ``` ### 四、注意事项 1. **避免过度压缩图形**:缩小饼图半径需在可读性和空间占用间平衡(引用[2])。 2. **谨慎使用`minAngle`**:可能扭曲数据比例(引用[3])。 3. **响应式设计**:在`resize`事件中重新计算标签位置: ```javascript myChart.on('resize', function() { // 重新设置Y轴范围等 }); ``` > 当基础方法无效时,可结合多种策略:如同时使用`avoidLabelOverlap`和`minAngle`(引用[3]),或动态调整Y轴范围配合标签位置自定义(引用[4])[^2][^3][^4]。 §§相关问题§§ 1. ECharts 如何实现标签的自动避让? 2. 饼图标签被截断该如何处理? 3. 柱状图数据值相同导致标签重叠怎么办? 4. 如何动态隐藏ECharts中过小的数据标签?</think>### ECharts 标签防重叠解决方案 在 ECharts 中设置标签避免重叠显示,可通过以下策略实现(结合引用[1][2][3][4]): --- #### 一、通用防重叠配置 ```javascript label: { show: true, avoidLabelOverlap: true, // 核心防重叠开关[^2][^3] // 其他辅助配置 padding: [5, 10], // 增加标签内边距 distance: 15, // 标签与图形距离 minMargin: 10 // 标签间最小间距 } ``` --- #### 二、图表类型专用方案 1. **饼图/环形图**(解决引用[2][3]问题) ```javascript series: [{ type: 'pie', radius: ['40%', '70%'], // 缩小半径留出标签空间[^2] minAngle: 5, // 设置最小扇区角度[^3] label: { alignTo: 'edge', // 标签对齐方式[^2] edgeDistance: '25%', formatter: '{b}\n{c}' // 换行显示[^2] } }] ``` *效果:小扇区自动隐藏标签,大扇区智能换行* 2. **柱状图**(解决引用[4]问题) ```javascript yAxis: { min: (value) => Math.floor(value.min * 0.9), max: (value) => Math.ceil(value.max * 1.1) // 动态扩展Y轴范围[^4] }, series: [{ type: 'bar', label: { position: (params) => { // 动态位置调整 return params.value > 10000 ? 'top' : 'insideTop'; } } }] ``` --- #### 三、高级防重叠技巧 1. **碰撞检测算法**(引用[1]原理) ```javascript labelLayout: { hideOverlap: true, // 自动隐藏重叠标签 moveOverlap: 'shiftY', // Y轴偏移 draggable: true // 允许用户手动调整 } ``` 2. **信息密度控制** ```javascript formatter: (params) => { // 数据过小时隐藏标签 return params.value > 5 ? `${params.name}: ${params.value}` : ''; } ``` 3. **响应式策略** ```javascript myChart.on('resize', () => { chart.setOption({ label: { fontSize: chart.getWidth() > 500 ? 12 : 10 } }); }); ``` --- #### 四、完整配置示例(饼图) ```javascript option = { tooltip: { trigger: 'item' }, series: [{ type: 'pie', radius: ['30%', '60%'], minAngle: 10, // 最小扇区角度[^3] label: { avoidLabelOverlap: true, alignTo: 'labelLine', formatter: '{b|{b}}\n{per|{d}%}', rich: { b: { fontWeight: 'bold' }, per: { fontSize: 10 } } }, data: [ { value: 1048, name: '搜索引擎' }, { value: 735, name: '直接访问' }, { value: 2, name: '极小值' } // 自动隐藏 ] }] }; ``` > **关键点总结**: > 1. 必开 `avoidLabelOverlap` 基础开关[^3] > 2. 结合 `minAngle` 过滤极小值扇区[^3] > 3. 通过 `radius` 控制图形占比[^2] > 4. 动态调整坐标轴范围分散标签[^4] > 5. 使用 `formatter` 控制信息密度[^1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值