SVG实现圆角图片实例页面
回到相关文章 »代码:
CSS代码:
.range-txt { color: #999; font-size: 12px; }
HTML代码:
<strong>这是原图</strong>
<p><img src="mm1.jpg" width="256" height="191"></p>
<strong>这是SVG实现</strong>
<p>水平圆角大小:<span class="range-txt"> 0 <input id="radiusH" type="range" min="0" max="128" value="128"> 128</span></p>
<p>垂直圆角大小:<span class="range-txt"> 0 <input id="radiusV" type="range" min="0" max="96" value="96"> 96</span></p>
<svg width="256" height="191">
<desc>SVG圆角效果</desc>
<defs>
<pattern id="raduisImage" patternUnits="userSpaceOnUse" width="256" height="191">
<image xlink:href="mm1.jpg" x="0" y="0" width="256" height="191" />
</pattern>
</defs>
<rect x="0" y="0" width="256" height="191" rx="128" ry="95" fill="url(#raduisImage)"></rect>
<!-- 圆形使用下面这个 -->
<!-- <circle cx="128" cy="95.5" r="95.5" fill="url(#raduisImage)"></circle> -->
</svg>
JS代码:
var rect = document.getElementsByTagName("rect")[0];
if (rect && [].forEach) {
["H", "V"].forEach(function(type, index) {
var input = document.getElementById("radius" + type);
input && input.addEventListener("change", function() {
var value = this.value * 1, val_min = this.getAttribute("min"), val_max = this.getAttribute("max");
value = value || 0;
if (val_min && val_max) {
if (value < val_min) value = val_min;
if (value > val_max) value = val_max;
// IE9等不支持range类型的浏览器
if (this.type != "range") this.value = value;
// 设置水平圆角
rect.setAttribute(index? "ry": "rx", value);
}
});
});
}
效果:
这是原图

水平圆角大小: 0 128
垂直圆角大小: 0 96