javascript - 需要在一个圆形图片上,等比例划分几个区域,然后在各个区域上添加文字
巴扎黑
巴扎黑 2017-04-11 11:18:39
0
2
643

现在后端是传来这个圆盘的背景图片和 上面各个奖项的文字,然后我们前端需要把文字都放在这个圆盘上,请问哪位大虾可以告诉我怎么实现吗

巴扎黑
巴扎黑

reply all(2)
洪涛

试试

transform: rotate(angle)

当然,用ps做个死的也是可以哒,哈哈

还有canvas也能做啊

这个应该是点击之后就有结果,然后看看要转多少度,再控制转速什么吧。

没做过这个,不知道你怎么做。

Peter_Zhu

<p class="prizeActive-context">

<p id="turnplatewrap">
    <p id="turnplate">
        <p class="platebtn"></p>
        <p id="msg" style="display: none">
            非常遗憾<br />没有中奖
        </p>
        <canvas id="canvas">您的浏览器不支持</canvas>
    </p>
    <p class="f-textAlignCenter fontColor-white f-fontSize">
        剩余&nbsp; <span class="lotteryTime">0</span>&nbsp;次
    </p>
</p>
<!--抽奖活动区-->
<?php if($LuckDrawId):?>
<p class="lottery-part2">
    <p class="clearfix f-marginLeft f-mt5" >
        <p class="floatLeft f-width60">
            <p class="f-actwds fontColor-white">一、活动时间</p>
            <p class="f-sm"><?php echo StringHelper::substr($weLuckDraw->start_date_time,0,-3)?> 至 <?php echo StringHelper::substr($weLuckDraw->end_date_time,0,-3)?></p>
            <p class="f-actwds fontColor-white">二、活动规则</p>
        </p>
        <p class="floatLeft f-width40 f-luckImg ">
            <img src="<?php echo Yii::app()->baseUrl.$weLuckDraw->url; ?>" />
        </p>
    </p>

    <p class="f-lotteryRules f-marginLeft" >
        <?php echo nl2br($weLuckDraw->luck_raw_desc);?>
    </p>
    <p style="height:10px;width:100%;position:absolute;display:block;margin-top:10px;line-height:30px;"></p>
            <?php if(isset($template)):?>
                <p class="f-LotterySection">
               <?php  echo $template->content;?>
                </p>
            <?php endif; ?>
</p>
<?php endif;?>
<!--抽奖活动区-->
<script type="text/javascript">
    $(function(){
        var content=$('.f-lotteryRules').html();
        

    })

</script>

</p>

<script type="text/javascript">
var core={

canvas:document.getElementById('canvas'),
cxt:this.canvas.getContext('2d'),
x:0,
y:0,
words:['五等奖','谢谢参与','一等奖','谢谢参与','二等奖','谢谢参与','三等奖','谢谢参与','四等奖','谢谢参与'],
color:['transparent','transparent','transparent','transparent','transparent','transparent','transparent','transparent','transparent','transparent'],
deg:Math.PI/180,
startTimer:null,
hasLottery:"<?php echo $status?>",//检查是否有抽奖活动
lotteryTime : 0 ,// 抽奖次数
isClick:false,
lightSwitch : 0, //闪灯切换开关. 0 和 1间切换
height: '250', //帧高度
height2:'592', //帧高度2
virtualDistance:8000, //总路程 ,速度越快,切换到下帧的时间越快: 切换到下帧的时间 = virtualDistance/curSpeed
minResistance:5, //基本阻力
Cx:0.01 ,//阻力系数
accSpeed:10,//加速度
accFrameLen:40, // 加速度持续帧数
minSpeed:20,
maxSpeed:150, 
frameLen:10, // 总数
totalFrame:0, //累计数
curFrame : 0, //当前帧
curSpeed : 20, //上帧速度
lotteryIndex:6 ,//奖品index
errorIndex:6,// 异常index
init : function(){
        this.lotteryPrepare();
        this.initCanvas();
        core.bg();
        $('body').css('background','#F29209');
        this.freshLottery();//更新抽奖次数
        $('.platebtn').click(function(){
            
             if(core.clickLock()){
                 
                 core.winPrice();
                core.lottery();//开始抽奖
             }
        });
        var _this=this;
      },
initCanvas:function(){
    var width=592;
    var height=592;
if(window.innerWidth>=768){
     width=width;
     height=width;
    }else{
     width=250;
    height=250;
     }
    this.canvas.width=width;
    this.canvas.height=height;
},

lotteryPrepare:function(){

var getlotteryTimesUrl ="<?php echo Yii::app()->createAbsoluteUrl('weChat/luckDraw/getRestLuckTimes',array('LuckDrawId'=>$LuckDrawId,'uid'=>$uid))?>";
$.ajax({
     type:'get',
     url:getlotteryTimesUrl,
     async:false,
     dataType:'json',
     beforeSend:function(xmlHttp){
         xmlHttp.setRequestHeader("If-Modified-Since","0");
         xmlHttp.setRequestHeader("Cache-Control","no-cache");
     },
     success: function(times){
          core.lotteryTime = times;
         },
         error:function(){
         }
     });

  
if(core.hasLottery !=0){
   var itemNameUrl = "<?php echo Yii::app()->createAbsoluteUrl('weChat/luckDraw/getItemsName',array('LuckDrawId'=>$LuckDrawId))?>";
    $.ajax({
     type:'get',
     url:itemNameUrl,
     async:false,
     dataType:'json',
     success: function(data){
          core.words = data;
         },
         error:function(){
         }
     });
}

},

winPrice : function(){
 var drawUrl = "<?php echo $this->createUrl('draw',array('LuckDrawId'=>$LuckDrawId,'uid'=>$uid))?>";
     $.ajax({
         type:'get',
         url:drawUrl,
         //cache:false
         async:false,
         success: function(data){
             if(data == 'nonDraw')
            {
                //alert('网络异常!请重试');
                //location.reload()
                 core.showMsg('网络异常!请重试');
                 setTimeout(function(){
                     location.reload();
                     },2000)
                 
            }
            else
            {
                core.lotteryIndex=parseInt(data)-1; 
            } 
         }
     });
   },

bg : function(){

    var cxt=this.cxt;
      if(window.innerWidth>=768){
         cxt.translate(296,296);
      }else{
           cxt.translate(125,125);
      }
       for(var i=0;i<10;i++){
        cxt.save();
        cxt.rotate(36*(i)*Math.PI/180);
        core.drowOne(this.color[i],core.words[i]);
        cxt.closePath();
        cxt.restore(); 
        }
     },
    drowOne: function(fillStyle,words){
            var cxt=this.cxt;
            cxt.save();
            cxt.fillStyle=fillStyle;
            cxt.beginPath();
            //画36°弧
            cxt.save();
            cxt.moveTo(core.x,core.y);
            cxt.rotate(-18*Math.PI/180);
            cxt.arc(core.x,core.y,100,0,core.deg*36,false);
            cxt.fill();
            cxt.restore();
            //绘制文本
             if(window.innerWidth>=768){
                cxt.font='18px 黑体';
                }else{
                    
                cxt.font='14px 黑体';}
            cxt.fillStyle='#FFE26E';
             if(window.innerWidth>=768){
                 cxt.fillText(words,core.x+100,core.y+5,50)
                 }else{
                 cxt.fillText(words,core.x+40,core.y+5,50)
                }
            cxt.closePath();
            cxt.restore();
        },
 
clickLock:function(){
  if(core.hasLottery == 1){
     this.showMsg('抽奖活动未开始');
       return false;
  }else if(core.hasLottery == 3){
     this.showMsg('此抽奖活动已经结束');
       return false;
  }else if(core.hasLottery == 0){
      this.showMsg('您没有权限参加此次活动');
    return false;
  }
  else{
      if(this.isClick==false){
          this.showMsg('正在抽奖中');
          return;
         }
      if(this.lotteryTime==0){
            this.showMsg('没有次数了');
        return false;
        }
  }
  return true;
},
lottery:function(){
    this.lotteryTime--;//次数减1
    this.freshLottery();//更新抽奖次数
    this.turnAround(); //灯环绕闪烁
    this.totalFrame=0; //重置
    this.curSpeed=this.minSpeed;
},
 freshSpeed : function(){
var totalResistance=this.minResistance+this.curSpeed*this.Cx;//总阻力值
var accSpeed=this.accSpeed; // 加速度 15 
var curSpeed=this.curSpeed;  // 初始速度 20
if(this.totalFrame>=this.accFrameLen){
    accSpeed=0;
 }
 curSpeed=curSpeed-totalResistance+accSpeed;
 if(curSpeed<this.minSpeed){    
     curSpeed=this.minSpeed;

 }else if(curSpeed>this.maxSpeed){
   curSpeed=this.maxSpeed;
 }
 this.curSpeed=curSpeed; 

},

turnAround:function(){
    this.isClick=false;
    var intervalTime=parseInt(this.virtualDistance/this.curSpeed);
    var _this=this;
    this.timer=window.setTimeout('core.changeNext()',intervalTime);
},
changeNext:function(){
    
     if(this.lotteryIndex!='undefined' && this.curFrame==this.lotteryIndex && this.curSpeed <= ((parseInt(this.minSpeed))+10) && this.totalFrame > this.accFrameLen){
           this.isClick=true;
        if(this.lotteryIndex-3>=0){
            if(core.words[this.lotteryIndex-3]=="谢谢参与"){
                this.showMsg('非常遗憾<br />没有中奖');
            }else{
                
                var uri=$.URL2URI("<?php echo Yii::app()->createAbsoluteUrl('weChat/luckDraw/winPrice',array('luckDrawId'=>$LuckDrawId))?>");
                
                uri.querys.awardName=encodeURIComponent(core.words[this.lotteryIndex-3]);
              
                this.isClick = false;
              
                   window.location.href = $.URI2URL(uri);
                //this.showMsg(core.words[this.lotteryIndex-3]);
            }
        }else{
            if(core.words[this.lotteryIndex+7]=="谢谢参与"){
                this.showMsg('非常遗憾<br /> 没有中奖');
            }else{
                
                var uri=$.URL2URI("<?php echo Yii::app()->createAbsoluteUrl('weChat/luckDraw/winPrice',array('luckDrawId'=>$LuckDrawId))?>");
                
                uri.querys.awardName=encodeURIComponent(core.words[this.lotteryIndex+7]);
                this.isClick = false;
                window.location.href = $.URI2URL(uri)
            
                //this.showMsg(core.words[this.lotteryIndex+7]);
            }
        }
        return;
    }

    var nextFrame=this.curFrame+1 < this.frameLen ? this.curFrame+1 : 0 ;
     if(window.innerWidth>=768){
         var bgTop = - nextFrame * this.height2;
         }else{
        var bgTop = - nextFrame * this.height;// 0--9* height
    }
    $('#turnplate').css('backgroundPosition','0 ' + bgTop.toString() + 'px');
    this.switchLight();     
    this.curFrame=nextFrame; // 0--9 之间切换
    
    this.totalFrame++;
    this.freshSpeed();//速度更新
    this.turnAround();//互相调用
    
},
freshLottery:function(){
   this.isClick=true;//解锁
   $('.lotteryTime').html(this.lotteryTime)
 },
//闪灯,切换到下一张时调用
switchLight : function() {
    this.lightSwitch = this.lightSwitch === 0 ? 1 : 0;
     if(window.innerWidth>=768){
         var lightHeight = -this.lightSwitch * this.height2;
        }else{
             var lightHeight = -this.lightSwitch * this.height;
         }
    //var lightHeight = -this.lightSwitch * this.height;
     $('#turnplatewrap').css('backgroundPosition','0 ' + lightHeight.toString() + 'px');
},
showMsg: function(msg){
    if(typeof msg == 'string'){
       $('#msg').html(msg);
       $('#msg').show();
      clearTimeout(this.startTimer);
      this.startTimer=setTimeout(function(){
        $('#msg').hide();
       },3000);
    }
},

}
core.init();
/横竖屏时重新加载/
$(window).bind('orientationchange',function(e){

 core.init();
})

</script>

Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template