간단한 튜토리얼
SVG를 사용하여 만든 다각형 그림 그리드 레이아웃입니다. 이 레이아웃에서는 SVG를 사용하여 화면을 여러 개의 폴리곤으로 나누고 각 폴리곤에 배경 이미지를 설정하는데 효과가 매우 좋습니다.
사용
페이지에 snap.svg를 도입하세요.
<script src='https://cdnjs.cloudflare.com/ajax/libs/snap.svg/0.4.1/snap.svg-min.js'></script>
CSS 스타일
다음과 같이 일부 CSS 스타일을 추가합니다.
body { margin:0px; padding: 0px; background-color: #141414; overflow: hidden; } path{ -webkit-transition:opacity 0.1s; cursor:pointer; opacity: 0.6;} path:hover{ opacity: 1; }
JavaScript
다음 js 코드를 사용하여 다각형 그리드 레이아웃을 만듭니다. team_rwby에 배치된 객체는 각 다각형의 배경 이미지입니다.
window.onload = function(argument) { w = window.innerWidth, h = window.innerHeight; /* svg init */ var paper = Snap(w, h); var team_rwby = { "ruby": "http://img.hb.aicdn.com/5d85ca4552076e9ebc84c9275794bebc1ce1dbf12498e-qPbnQc_fw658", "weiss": "http://img.hb.aicdn.com/ed55102bd05a0c95473cb958747091f2fcb3b98e94c0b-PC5EbL_fw658", "blake": "http://img.hb.aicdn.com/4736a6567a20b1c6d8af1ab22d827abd23bd7f044fd95-3dMoyr_fw658", "yang": "http://img.hb.aicdn.com/29125306a1a2cfd2d732a54b487d37b7372c36c8692ce-OwTMnW_fw658" }; /* this polygons' array include coordinates and image's source */ var polygons = []; polygons.push({ "coordinates": [ [0, 0], [w * 0.6, 0], [0, h * 0.5] ], "strokeStyle": "black", "strokeWidth": 10, "image_src": team_rwby.ruby }, { "coordinates": [ [0, h * 0.5], [w * 0.3, h * 0.25], [w * 0.55, h], [0, h] ], "strokeStyle": "black", "strokeWidth": 10, "image_src": team_rwby.yang }, { "coordinates": [ [w * 0.3, h * 0.25], [w * 0.75, h * 0.55], [w * 0.55, h], ], "strokeStyle": "black", "strokeWidth": 10, "image_src": team_rwby.blake }, { "coordinates": [ [w * 0.55, h], [w, 0], [w, h], ], "strokeStyle": "black", "strokeWidth": 10, "image_src": team_rwby.ruby }, { "coordinates": [ [w * 0.6, 0], [w, 0], [w * 0.75, h * 0.55], [w * 0.3, h * 0.25], ], "strokeStyle": "black", "strokeWidth": 10, "image_src": team_rwby.weiss }); for (var i = 0; i < polygons.length; i++) { make_polygon_layout(paper, polygons[i]); } } function make_polygon_layout() { paper = arguments[0]; polygon = arguments[1]; tempA = []; for (var i = 0; i < polygon.coordinates.length; i++) { tempA[i] = polygon.coordinates[i]; } /* get largest and smallest x coordinate */ tempA.sort(function(a, b) { return a[0] - b[0]; }); sX = tempA[0][0]; bX = tempA[tempA.length - 1][0]; /* get largest and smallest ycoordinate */ tempA.sort(function(a, b) { return a[1] - b[1]; }); sY = tempA[0][1]; bY = tempA[tempA.length - 1][1]; polygon.startPoint = [sX, sY]; polygon.endPoint = [bX, bY]; polygon.width = polygon.endPoint[0] - polygon.startPoint[0]; polygon.height = polygon.endPoint[1] - polygon.startPoint[1]; var pattern = paper.image(polygon.image_src, 0, 0, polygon.width, polygon.height) .attr("preserveAspectRatio", "xMidYMid slice") .pattern({ 'x': polygon.startPoint[0], 'y': polygon.startPoint[1], 'width': polygon.width, 'height': polygon.height }).attr('viewBox', ""); var path = paper.path({ "d": make_path(polygon.coordinates), "strokeWidth": polygon.strokeWidth, 'stroke-linejoin': "round", 'stroke': polygon.strokeStyle, "fill": pattern, }); path.click(function(event) { }); } function make_path() { d = "M"; coordinates = arguments[0]; for (var i = 0; i < coordinates.length; i++) { if (i == 0) { d += coordinates[i][0] + " " + coordinates[i][1] } else { d += "L" + coordinates[i][0] + " " + coordinates[i][1] } } return d + "z"; }
위 내용은 SVG 기반의 다각형 이미지 그리드 레이아웃 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!