代码:
vue
图标就是代码中的a标签,下面是实现的js代码部分element-ui
//变换播放/暂停按钮 if (this.playClass[tagID] = 'playbtn1') { this.playClass[tagID] = 'playbtn'; this.wavesurfer.play(minS, maxS); } else if (this.playClass[tagID] = 'playbtn') { this.playClass[tagID] = 'playbtn1'; this.wavesurfer.pause(minS, maxS); } else { console.log('图标切换不成功'); }
当这样写的时候却没有效果,后来查了下,是由于element-ui自己的机制问题,原本这里是经过数组渲染出来的,我这里每次点击不一样li标签里面的按钮,数组里面相应的样式也会改变,可是element-ui他的机制是要个人整个数组变化他才会渲染,就是他是渲染的整个数组,当一个元素变化的时候,他默认整个数组没变,因此不显示,因此这里个人解决方法是先把这个数组深度拷贝一份出来,监听点击的当前按钮在数组中的位置拷贝给所拷贝的数组的相应位置,改变他的值,这样的话咱们就获得一个改变一个元素的数组了,而后再将这个数组赋值给原数组,那么原数组也是一个整个数组都改变的新数组,这样他就会渲染了。
数组
解决的代码以下:ui
//深拷贝一份样式数组 $.extend(true, showClass, this.playClass); if (this.playClass[tagID] == 'playbtn1') { $.extend(true, showClass[tagID], this.playClass[tagID]); //拷贝位置 showClass[tagID] = 'playbtn'; this.playClass = showClass; this.wavesurfer.play(minS, maxS); } else if (this.playClass[tagID] == 'playbtn') { $.extend(true, showClass[tagID], this.playClass[tagID]); showClass[tagID] = 'playbtn1'; this.playClass = showClass; this.wavesurfer.pause(minS, maxS); } else { console.log('图标切换不成功'); }