悬停并单击CSS三角形

s4chpxco  于 2023-11-19  发布在  其他
关注(0)|答案(4)|浏览(128)

我有一个三角形,用一个JavaScript函数移动图像。
问题是该元素具有方形形状,因此单击和悬停状态在三角形外部触发(请参见下图中的红色部分):
x1c 0d1x的数据

如何在三角形外部禁止悬停和点击,而在三角形内部只允许点击/悬停状态?

现在我只有一个div和content:url('http://static.tumblr.com/g1c47pc/7iMn39g0v/tr1.png');来做一个三角形,但是我不知道如何让它可以悬停/点击。如果有其他方法,我愿意接受。
https://jsfiddle.net/EdB27/1/

wwtsj6pe

wwtsj6pe1#

为了防止悬停和点击CSS三角形外面你可以使用变换来使三角形。
这种技术在这里描述:CSS三角形与transform旋转
关键是使用一个带有隐藏溢出的 Package 器,旋转可点击/可悬停元素,使其实际上具有三角形形状,并防止点击事件或悬停状态出现在三角形之外。

演示:Click and hover on a CSS triangle

.tr {
  width: 40%;
  padding-bottom: 28.2842712474619%; /* = width / sqrt(2) */
  position: relative;
  overflow: hidden;
}
.tr a {
  position: absolute;
  top: 0; left: 0;
  width: 100%; height: 100%;
  background-color: rgba(0, 122, 199, 0.7);
  transform-origin: 0 100%;
  transform: rotate(45deg);
  transition: background-color .3s;
}
/** hover effect **/
.tr a:hover {
  background: rgba(255, 165, 0, 0.7);
}

个字符
另一种方法是使用带有可点击三角形的SVG

#tr{
  fill:transparent;
  transition:fill .3s;
}
#tr:hover{
  fill: orange;
}

/** for the demo **/
html,body{height:100%;margin:0; padding:0;}
body{background:url('https://farm8.staticflickr.com/7435/13629508935_62a5ddf8ec_c.jpg') center no-repeat;background-size:contain;}
svg{display:block;width:30%;margin:0 auto;}
<svg viewbox="-2 -2 104 64">
  <a xlink:href="#">
    <polygon id="tr" points="50 0 100 60 0 60" fill="transparent" stroke="darkorange" stroke-width="2"/>
  </a>
</svg>

的字符串

wmvff8tz

wmvff8tz2#

你应该能够使用一个图像贴图。只需创建一个多边形,通过将坐标设置为(w/2, 0), (w, h), (0, h)来覆盖三角形,其中wh是宽度和高度。(假设一个等边三角形,就像你的例子一样。否则只需使用图像编辑器找到点。)

<img src="https://upload.wikimedia.org/wikipedia/commons/thumb/7/7f/Green_equilateral_triangle_point_up.svg/600px-Green_equilateral_triangle_point_up.svg.png"
     width="60" height="52"
     usemap="#imgmap" />

<map name="imgmap">
    <area href="javascript:alert('Triggered')"
          shape="poly"
          coords="30,0,60,52,0,52"
          style="outline:none;"
          target="_self" />
</map>

字符串
演示:http://jsfiddle.net/QXv2c/

6l7fqoea

6l7fqoea3#

这应该是可行的: (基于Brian Nickel's answer到另一个问题)

$('#triangle').mousedown(function(e) {
    e.preventDefault();

    //create matching canvas representation for the image
    if(!this.canvas) {
        this.canvas = $('<canvas/>')[0];
        this.canvas.width = this.width;
        this.canvas.height = this.height;
        this.canvas.getContext('2d').drawImage(this, 0, 0, this.width, this.height);
    }
    var pixelData = this.canvas.getContext('2d').getImageData(e.offsetX, e.offsetY, 1, 1).data;

    //check that the pixel is not transparent
    if (pixelData[3] > 0) {
        //your code
    }
});

字符串
示例:http://jsfiddle.net/FCf9d/
此解决方案假定三角形内部没有透明像素。
这个例子使用了jsfiddle logo而不是三角形,因为你不能使用远程图像。jsfiddle-logo可以工作,因为它在jsFiddle-domain上,但任何其他随机图像都不起作用。
但是,一旦你在自己的网站上实现了代码,这就不应该是一个问题。
我擅自为你添加了移动功能,这样你就可以看到所有的动作。如果你喜欢我的脚本,想添加边界到移动区域,看看我的另一个小提琴,它内置了这些:http://jsfiddle.net/SN8Ys/

fae0ux8s

fae0ux8s4#

这是一个简洁的解决方案,但是我不确定点击部分。也许你可以用它来屏蔽你所拥有的。

HTML:

<div class="arrow-up"></div>
<div class="arrow-down"></div>
<div class="arrow-left"></div>
<div class="arrow-right"></div>

字符串

CSS:

.arrow-up {
    width: 0; 
    height: 0; 
    border-left: 5px solid transparent;
    border-right: 5px solid transparent;

    border-bottom: 5px solid black;
}

.arrow-down {
    width: 0; 
    height: 0; 
    border-left: 20px solid transparent;
    border-right: 20px solid transparent;

    border-top: 20px solid #f00;
}

.arrow-right {
    width: 0; 
    height: 0; 
    border-top: 60px solid transparent;
    border-bottom: 60px solid transparent;

    border-left: 60px solid green;
}

.arrow-left {
    width: 0; 
    height: 0; 
    border-top: 10px solid transparent;
    border-bottom: 10px solid transparent; 

    border-right:10px solid blue; 
}


来源:http://css-tricks.com/snippets/css/css-triangle/

相关问题