Search code examples
csssvgtooltipsvg-animate

SVG change cursor from `cursor:wait` into e.g. `cursor:help` after hovering n seconds (loading time for tooltip) without scripting?


There has been a question about changing the cursor using before on this site, but it asked for a solution using Javascript, and it wasn't specific about when to trigger the action to change the cursor.

My question is about SVG and CSS/SMIL without the use of other scripting languages such as Javascript.

When hovering over a certain object, how to change the cursor from cursor:wait into e.g. cursor:help? The change should be triggered after an exact amount of seconds of being hovered over the object.

The use-case is clearly presented in a minimal snippet below.

MWE SNIPPET

#MOUSE_OVER_THESE{
  cursor:wait;
}
<svg id="SVG"
  version="1.1"
  xmlns="http://www.w3.org/2000/svg"
  xmlns:xlink="http://www.w3.org/1999/xlink"
  width="250"
  height="175"
  viewBox="0 0 250 175">

<text font-size="10" x="10" y="20">
<tspan
  x="10" dy="0">Hover over the objects below. Can the cursor</tspan><tspan
  x="10" dy="12">change from "cursor:wait" into e.g. "cursor:help"</tspan><tspan
  x="10" dy="12.5">after about 1 second, (which will be right</tspan><tspan
  x="10" dy="12.5">about when the tooltip appears on certain</tspan><tspan
  x="10" dy="12.5">browsers) without using any scripting language?</tspan></text>

<g id="MOUSE_OVER_THESE">

<rect x="50" y="100" width="60" height="50" fill="red">
<title>This is a tooltip.</title>
</rect>
<rect x="150" y="100" width="60" height="50" fill="blue">
<title>This is another tooltip.</title>
</rect>

</g>

</svg>

I can not afford to use scripting languages such as Javascript, so I am wondering if there is a more native SVG with CSS/SMIL approach.


Solution

  • Here is a trick using transition and a hidden element.

    UPDATE

    The mouse need to be moved slightly in order to see the cursor change

    .hide {
      transition:1s visibility 1s;
      cursor:wait;
    }
    .hide:hover {
      visibility:hidden;
    }
    
    #MOUSE_OVER_THESE {
        cursor:help;
    }
    #MOUSE_OVER_THESE:hover + .hide {
      display:none;
    }
    <svg id="SVG"
      version="1.1"
      xmlns="http://www.w3.org/2000/svg"
      xmlns:xlink="http://www.w3.org/1999/xlink"
      width="250"
      height="175"
      viewBox="0 0 250 175">
    
    <text font-size="10" x="10" y="20">
    <tspan
      x="10" dy="0">Hover over the objects below. Can the cursor</tspan><tspan
      x="10" dy="12">change from "cursor:wait" into e.g. "cursor:help"</tspan><tspan
      x="10" dy="12.5">after about 1 second, (which will be right</tspan><tspan
      x="10" dy="12.5">about when the tooltip appears on certain</tspan><tspan
      x="10" dy="12.5">browsers) without using any scripting language?</tspan></text>
    
    <g id="MOUSE_OVER_THESE">
    <rect x="50" y="100" width="60" height="50" fill="red">
    <title>This is a tooltip.</title>
    </rect>
    <rect x="150" y="100" width="60" height="50" fill="blue">
    <title>This is another tooltip.</title>
    </rect>
    </g>
    <rect class="hide" x="50" y="100" width="160" height="50" fill="transparent"></rect>
    
    </svg>