HTML之环形图

html-css020

HTML之环形图,第1张

Chart.js允许通过HTML5的canvas进行图表绘制。这里我们希望绘制一个环形图,点击图上各segment时可以显示自定义的圆形tooltip。Chart.js支持通过几个变量添加tooltip,它提供一个tooltipTemplate但是却不支持自定义tooltip的HTML!于是决定自行绘制tooltip手动添加上去。

不知道这合不合你意,,不过你这个要求,,可以搜索一下一些JQUERY效果,, <html>

 <head>

  <title>图片环形滚动</title>

<style>

html,body{background:#990000margin:0px }

#pics_3d{

position:absolute

height:300px

width:100% 

background:#000 

top:120px

border-bottom:20px solid #420000 

border-top:20px solid #420000 

}

img{

position:absolute

background:#eee 

left:0top:0

border:5px solid #00CCFF

}

</style>

 </head>

 <body>

 <div id="pics_3d">

  <img src="/jscss/demoimg/wall5.jpg" />  

  <img src="/jscss/demoimg/wall6.jpg" />  

  <img src="/jscss/demoimg/wall7.jpg" />  

 </div>

 </body>

<script >

Item=function(UI){

this.angle=0

this.UI=UI

this.update()

}

Item.ini={

axle_w:400,

axle_h:10,

cen_x:500,

cen_y:260

}

Item.prototype.update=function(){

var J=this.UI.style,C=Item.ini,W=C.axle_w,H=C.axle_h,X=C.cen_x,Y=C.cen_y

var angle=this.angle/180*Math.PI

var left=Math.cos(angle)*W+X

var top=Math.sin(angle)*H+Y

var A=this.angle>270?this.angle-360:this.angle

var size=360-Math.abs(90-A)*3

this.UI.width=Math.max(size,120)

var opacity=Math.max(10,size-180)

J.filter='alpha(opacity='+opacity+')'

J.opacity=opacity/100

J.left=(left-this.UI.offsetWidth/2)+'px'

top=(top-this.UI.offsetHeight)+'px'

J.top=top

J.zIndex=parseInt(size*100)

}

Nav_3D={

items:[],

dir:1,

index:0,

hover:false,

add:function(item){

this.items.push(item)

item.index=this.items.length-1

item.UI.onclick=function (){

var J=item.angle,M=Nav_3D

if(M.uping)return

if(J==90){

return alert('goto new url..')

}

M.wheel_90(item)

M.index=item.index

}

item.UI.onmouseover=function (){

if(item.angle==90){

Nav_3D.hover=true

clearTimeout(Nav_3D.autoTimer)

}

}

item.UI.onmouseout=function (){

if(item.angle==90){

Nav_3D.hover=false

Nav_3D.auto()

}

}

return this

},

wheel_90:function(hot){

if(this.uping)return

this.uping=true

var This=this

this.timer=setInterval(function (){

clearTimeout(This.autoTimer)

var A=hot.angle

This.dir=A<270&&A>90?-1:1

if(A==90){

clearInterval(This.timer)

This.uping=false

This.onEnd(hot)

}

if(A>270)A-=360

var set=Math.ceil(Math.abs((90-A)*0.1))

for (var i=0i<This.items.lengthi++ ) {

var J=This.items[i]

J.angle+= (set*This.dir)

J.update()

if(J.angle>360)J.angle-=360

if(J.angle<0)J.angle +=360

}

},15)

},

ready:function(){

var J=this.items,step=parseInt(360/J.length)

for (var i=0i<J.lengthi++) {J[i].angle=i*step+90}

this.wheel_90(this.items[0])

Nav_3D.prevHot=this.items[0].UI

Nav_3D.setHot()

},

setHot:function(isHot){

if(!this.prevHot)return

with(this.prevHot.style){

borderColor=isHot!==false?'#CC0000':'#00CCFF'

cursor=isHot!==false?'default':"pointer"

}

return this

},

auto:function(){

this.index--

if(this.index<0)this.index=this.items.length-1

var J=this.items[this.index]

this.setHot(false).prevHot=J.UI

this.setHot()

this.wheel_90(J)

},

onEnd:function(hot){

if(this.hover){

return setTimeout(function(){Nav_3D.onEnd()},100)

}

this.autoTimer=setTimeout(function(){Nav_3D.auto()},1500)

}

}

var imgs=document.getElementById("pics_3d").getElementsByTagName("IMG")

for (var i=0i<imgs.lengthi++ ) {

Nav_3D.add(new Item(imgs[i]))

}

Nav_3D.ready()

</script>

</html>

我用两个div写的实现楼主所说效果

.div1 {

width:100px

height:100px

background-color:transparent

border:4px solid red

border-radius:60px

margin-top:20px

}

.div2 {

width:60px

height:60px

background-color:#fff

z-index:1

border-radius:45px

position:absolute

top:0

left:80px

}

还有一个是用HTML5的canvas标签,不过得用JS