JS实现对控件点击显示或悬浮显示自定义内容

  • Last update:August 08, 2020
  • 1. 概述

    1.1 预期效果

    在实际场景中,我们可以对于单元格内容使用内容提示,通过显示title的方法来显示自定义内容。

    但是:

    1. 没有点击提示(点击目标控件显示,点击其他任意位置,移除),只有悬浮提示;

    2. 局限于单元格,无法迁移到参数面板上的控件使用

    于是,本文提供一个方法:对参数面板上控件点击或者悬浮,显示自定义内容(可具备一定的样式),效果如下:

    点击或者悬浮提示.gif

    1.2 实现思路

    思路拆分:

    1. 通过js给页面增加一个div元素,这个div元素中可以写入内容,通过css控制样式显示 ,再通过点击事件或者鼠标移入移出事件来触发显示这个元素或者移除这个元素的效果。

    2. 提示内容的位置,通过获取目标控件的位置(x,y),进行一定的像素偏移,定位我们需要的提示的位置;

    3. 点击目标区域(目标控件)提示,点击其他位置,移除提示,则通过点击body移除div元素(阻止冒泡事件)来完成。

    2. 示例

    2.1 模板设计

    这里是使用cpt模板参数面板上的label控件,进行示例。

    步骤如下:

    1. 新建普通报表:拖入label控件到参数面板,命名label0,控件值中写入字符串"点击提示";再拖入一个label1,命名label1,控件值写入字符串"悬浮提示";

    2. 将以下js写入到  参数面板的初始化事件中:

      setTimeout(function(){

      $("[widgetname='LABEL0']").click(function(e){
      var x = 10;
      var y = 20;
      var z = "dadfafasfsalakj<br />kalfasjdkfsafkjasfas" //这里写我们想要放置的内容
      $("#preview").remove();// 防止点击第二次
      $("body").append("<div id='preview'>"+z+"</div>");//弹出一个div里面放着内容
      $("#preview")//修改这个div的样式
      .css("position","absolute")
      .css("z-index","9999999")
      .css("left",(e.pageX + x + 'px')) //调整这个div出现的水平方向位置
      .css("top",(e.pageY - y + 'px'))  //调整这个div出现的垂直方向位置
      .css("padding","4px")
      .css("border","1px solid pink")
      .css("border-radius","4px")
      .css("background-color","skyblue")
      .css("font-size","14px")
      .css("font-famliy","微软雅黑")
      .css("color","blue")
      e.stopPropagation(); //阻止冒泡事件
      });

      $("body").click(function(e){
      $("#preview").remove();
      })

      },100);

      ①简单说明一下: z = "1.dadfafasfsalakj<br />2.kalfasjdkfsafkjasfas" 即为我们需要添加为自定义内容提示的内容,可以看到里面加入了 <br />  html的换行标签,也就是说这里的内容,完全可以自己布局设置,除了换行,还有加入一些空格&nbsp;或者用<table></table>来做框架或者画表格什么的。可以自行延伸。

      ②再给body增加了一个id 为preview的div元素来承载我们要显示的内容,其中$("#preview").remove();// 防止点击第二次 这个地方是因为每次点击控件前删除上次点击出现的内容,保证不会一直增加,导致点击多次后页面显示出问题;

      ③x,y变量结合left,top,以及postion来实现我们的内容出现在合理的位置。

      $("body").click(function(e)这个及下面的内容是为了点击body任意部分移除元素的,但是label也属于在body中所以要加e.stopPropagation()阻止冒泡事件;

      ⑤其他的css样式,可以根据自己需要的,设置内边距,背景,边框,圆角,字号,字体,字色。


    3. 再将以下js写入到  参数面板的另一个初始化事件中:

      setTimeout(function(){	
      $("[widgetname='LABEL1']").mouseover(function(e){
      var x = 10;
      var y = 20;
      var z = "1.dadfafasfsalakj<br />2.kalfasjdkfsafkjasfas" //这里写我们想要放置的内容
      $("body").append("<div id='preview1'>"+z+"</div>");//弹出一个div里面放着内容
      $("#preview1")//修改这个div的样式
      .css("position","absolute")
      .css("z-index","9999999")
      .css("left",(e.pageX + x + 'px')) //调整这个div出现的水平方向位置
      .css("top",(e.pageY - y + 'px'))  //调整这个div出现的垂直方向位置
      .css("padding","4px")
      .css("border","1px solid pink")
      .css("border-radius","4px")
      .css("background-color","skyblue")
      .css("font-size","14px")
      .css("font-famliy","微软雅黑")
      .css("color","blue")

      });
      //鼠标离开这个div移除
      $("[widgetname='LABEL1']").mouseout(function(e){
      $("#preview1").remove();
      });
      },100)

      这个其实和点击的基本上雷同,稍微注意下,获取控件为了区别开,要写对,这里是LABEL1,以及增加元素的id变成了preview1。

      这里就不用click了,因为是悬浮,所以用了mouseovermouseout方法,其实也可以用hover来,根据个人使用习惯即可。


    3. 模板下载

    点击下载模板:

    提示测试1.cpt

    4. 注意事项

    1.label控件上控件值的字符串,如“悬浮提示”一定要写,不然鼠标没法点到。

    2.理论上可以迁移到其他控件,以及frm模板,以及单元格(获取单元格,注:决策报表和普通报表获取单元格方法略有区别,可自行了解)中,可自行尝试。


    Attachment List


    Theme: 下架文档
    Already the First
    • Helpful
    • Not helpful
    • Only read

    滑鼠選中內容,快速回饋問題

    滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。

    不再提示

    10s後關閉

    Get
    Help
    Online Support
    Professional technical support is provided to quickly help you solve problems.
    Online support is available from 9:00-12:00 and 13:30-17:30 on weekdays.
    Page Feedback
    You can provide suggestions and feedback for the current web page.
    Pre-Sales Consultation
    Business Consultation
    Business: international@fanruan.com
    Support: support@fanruan.com
    Page Feedback
    *Problem Type
    Cannot be empty
    Problem Description
    0/1000
    Cannot be empty

    Submitted successfully

    Network busy