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

    这里写图片描述

  • 相关阅读:
    Java实现 蓝桥杯VIP 算法提高 排队打水问题
    Java实现 蓝桥杯VIP 算法提高 排队打水问题
    Java实现 蓝桥杯VIP 算法提高 排队打水问题
    Java实现 蓝桥杯VIP 算法提高 特殊的质数肋骨
    Java实现 蓝桥杯VIP 算法提高 特殊的质数肋骨
    Java实现 蓝桥杯VIP 算法提高 特殊的质数肋骨
    Java实现 蓝桥杯VIP 算法提高 特殊的质数肋骨
    现在使用控件, 更喜欢继承(覆盖控件已有的函数,很奇怪的一种使用方式)
    Controls 属性与继承 TShape 类的小练习(使用TShape可以解决很多图形问题)
    QT创建窗口程序、消息循环和WinMain函数(为主线程建立了一个QEventLoop,并执行exec函数)
  • 原文地址:https://www.cnblogs.com/caojunjie/p/8318876.html
Copyright © 2011-2022 走看看