zoukankan      html  css  js  c++  java
  • 可视化交互行为

    交互式入门:鼠标,键盘,触屏

    事件;d3.event

    行为:退拽,缩放

    1.鼠标点击事件

    要领:
    //鼠标常用事件: click,mouseover,mouseout,mousemove,mousedown,mouseup,dbclick    
    //鼠标事件都是在on(“click”,function(){})的形式中调用的
    
    var rect = svg.selectAll("rect")
                    .data(dataset)      //绑定数据
                    .enter()            //获取enter部分
                    .append("rect") //添加rect元素,使其与绑定数组的长度一致
                    .attr("fill","steelblue")       //设置颜色为steelblue
                    .attr("x", function(d,i){       //设置矩形的x坐标
                        return padding.left + xScale(i);
                    })
                    .attr("y", function(d){     //设置矩形的y坐标
                        return height- padding.bottom - yScale(d);
                    })
                    .attr("width",xScale.rangeBand())       //设置矩形的宽度
                    .attr("height",function(d){ //设置矩形的高度
                        return yScale(d);
                    })
                    .on("mouseover",function(d,i){
                        d3.select(this)
                          .attr("fill","yellow");
                    })
                    .on("mouseout",function(d,i){
                        d3.select(this)
                          .transition()
                          .duration(500)
                          .attr("fill","steelblue");
                    });  

    这里写图片描述

    mouseover下的d3.event

    这里写图片描述
    2.键盘事件

    //键盘事件有三种,keydown,keypress,keyup。
    //keydown和keypress区别:keydown是任意键,可以触发如上下左右,ctrl,shift等键,不区分大小写,keypress是字符键,且区分大小写,(大小写字母,数字,+,=,回车)
    
    var rects=svg.selectAll("rect")
               .data(charactor)
               .enter()
               .append("rect")
               .attr("x",function(d,i){
                    return 40+i*60;
               })
               .attr("y",function(d,i){
                    return height/2;
               })
               .attr("width",function(d,i){
                    return 60;
               })
               .attr("height",function(d,i){
                    return 60;
               })
               .attr("rx",5)
               .attr("ry",5)
               .attr("fill","black")
    
    var texts=svg.selectAll("text")
               .data(charactor)
               .enter()
               .append("text")
               .attr("x",function(d,i){
                    return 40+i*60;
               })
               .attr("y",function(d,i){
                    return height/2+30;
               })
               .attr("dx",function(d,i){
                    return 20;
               })
               .attr("dy",function(d,i){
                    return 0;
               })
               .attr("fill","white")
               .attr("fontsize",20)
               .text(function(d){
                     return d;
               })
    
    d3.select("body")
      .on("keydown",function(){
            texts.attr("fill",function(d,i){
                if (d==String.fromCharCode(d3.event.keyCode)){
                    return "red";//将由事件获取的asc码转换为字符串
                }else{
                    return "white";
                }
            })
      })
      .on("keyup",function(){
            texts.attr("fill","white")
      })
    

    这里写图片描述

    键盘事件下d3.event

    这里写图片描述
    二.事件

    所有的事件都保存在d3.event对象中,其中我们的上边键盘事件d3.event.keyCode就是键盘事件中的一个变量成员,不同的事件d3.event中的成员是不同的,这个我们不用自己考虑,不同的事件设备会自己感知。

    三.行为(behavior)

    //behavior下的方法只有两种,drag和zoom
    d3.behavior.drag - 创建拖动行为。
    drag.on - 监听拖动事件。
    drag.origin - 设置拖动行为的原点。
    缩放
    //zoom对象下的方法
    d3.behavior.zoom - 创建缩放行为。
    zoom.center - 鼠标滚轮缩放的焦点。
    zoom.duration - 取得或设置双击事件的过渡持续的时间。
    zoom.event - 设置完缩放比例或平移之后分发缩放事件。
    zoom.on - 事件监听器。//on("zoomstart/zoom/zoomend")
    zoom.scaleExtent - 可选参数,比例因子范围。
    zoom.scale - 当前的比例因子。
    zoom.size - 视口的大小。
    zoom.translate - 当前的平移偏移量。
    zoom.x - 可选比例尺,其定义域绑定到视口的_x_范围。
    zoom.y - 可选比例尺,其定义域绑定到视口的_y_范围。
    zoom - 给指定的元素应用缩放行为。

    1)drag

    //original()方法确定的是被选择元素的初始坐标,方法返回x,y变量,也可以设定固定值,当拖动时,元素会跑到固定坐标上,再被拖动
    var drag=d3.behavior.drag()
                            .origin(function(d,i){
                                    return {x:d[0],y:d[1]};//set the start coordinate of the circle
                            })
                            .on("dragstart",function(d,i){
                                    console.log("drag start")
                            })
                            .on("dragend",function(d,i){
                                    console.log("drag end")
                            })
                            .on("drag",function(d){
                                d3.select(this)
                                  .attr("cx",d[0]=d3.event.x)  //transmit the mouse coordinates to the original
                                  .attr("cy",d[1]=d3.event.y)
                            })
    
        svg.selectAll("circle")
           .data(dataset)
           .enter()
           .append("circle")
           .attr("cx",function(d,i){
                return d[0];
           })
           .attr("cy",function(d,i){
                return d[1];
           })
           .attr("r",50)
           .call(drag);

    这里写图片描述

    drag事件下d3.event

    这里写图片描述

    2)zoom

    var dataset=[{cx:120,cy:120,r:50},
                     {cx:270,cy:120,r:40}
                    ]
    
        var zoom=d3.behavior.zoom()
                            .scaleExtent([1,10])
                            .on("zoom",function(d){
                                console.log(d3.event);
                                d3.select(this)
                                  .attr("transform","translate("+d3.event.translate+")"
                                    +"scale("+d3.event.scale+")");
                            })
    //transform里有两个变量,translate用于平移,scale用于缩放,而d3.event中正好有这两个变量
        var g=svg.append("g")
                 .call(zoom)
        g.selectAll("circle")
         .data(dataset)
         .enter()
         .append("circle")
         .attr("cx",function(d,i){
                return d.cx;
         })
         .attr("cy",function(d,i){
                return d.cy;
         })
         .attr("r",function(d,i){
                return d.r;
         })
         .attr("fill","black");

    这里写图片描述

    zoom事件下,d3.event

    这里写图片描述

  • 相关阅读:
    Gitlab+Jenkins学习之路(二)之gitlab部署
    Gitlab+Jenkins学习之路(一)之Git基础
    Zabbix学习之路(十)之分布式监控zabbix_proxy及交换机监控
    Zabbix学习之路(九)之低级自动发现以及MySQL多实例
    Zabbix学习之路(八)之自动化监控网络发现和主动注册
    Zabbix学习之路(七)之Nginx的状态监控
    Zabbix学习之路(六)TCP状态监控
    Zabbix学习之路(五)之MySQL监控
    Zabbix学习之路(四)之Web监控
    Zabbix学习之路(三)之使用SMTP发送邮件报警及定制邮件报警内容
  • 原文地址:https://www.cnblogs.com/caojunjie/p/8318876.html
Copyright © 2011-2022 走看看