0
Q
使用角模板和鏈接
A
回答
0
這是幾乎沒有用的東西。運行下面的代碼片段。
這不是有史以來最好的代碼,但也許它會提供一些靈感。我基本上推出了自己的平滑按鈕。這不是超級漂亮,可以使用很多工作,但我沒有時間:)我添加鏈接的方式是在mouseover和mouseout事件期間插入外來對象。
我很確定tween max庫也使用svg。
無論如何,也許你可以從中吸取靈感。如果這是浪費空間,請告訴我,我會刪除它。
var app = angular.module("testApp", []);
app.directive('smoothButton', function() {
var linker = function (scope, element, attrs) {
var colors = ["red", "green", "yellow", "blue"]
var circles = [];
var links = [];
var speed = 1; //ms
var size = 45;
var x = 150;
var y = 150;
for (var i = 3; i >= 0; i--) {
addCircle(element, x, y, size, i);
}
var grow = function (size, finalSize, idx) {
var interval = setInterval(function() {
var circle = circles[idx];
if (size >= finalSize) {
clearInterval(interval);
addLink(element,
x - 20,
180 - (finalSize * 1.5));
}
size += 1;
circle.setAttribute("r", size);
}, speed);
}
var shrink = function (size, finalSize, idx) {
var interval = setInterval(function() {
var circle = circles[idx];
if (size <= finalSize) {
clearInterval(interval);
for (link in links) {
if (links[link].parentNode) links[link].parentNode.removeChild(links[link]);
}
}
size -= 1;
circle.setAttribute("r", size);
}, speed);
}
function getFinalSize(size, idx) {
var result = size;
return result + (result * (Math.log(Math.abs(idx - 3) + 1.2)));
}
function addCircle(element, x, y, size, i) {
var circle = document.createElementNS("http://www.w3.org/2000/svg", "circle");
circle.setAttribute("cx", x);
circle.setAttribute("cy", y);
circle.setAttribute("r", size);
circle.setAttribute("fill", colors[i]);
element.parent().append(circle);
if (i == 0) {
circle.addEventListener("mouseover", function() {
for (var j = 0; j < 3; j++) {
grow(size, getFinalSize(size, j), j);
}
});
}
//last circle only
if (i == 3) {
circle.addEventListener("mouseout", function() {
for (var j = 0; j < 3; j++) {
shrink(getFinalSize(size, j), size, j);
}
});
}
circles.push(circle);
}
function addLink(element, x, y) {
var fo = document.createElementNS("http://www.w3.org/2000/svg", "foreignObject");
fo.setAttribute("width", "50");
fo.setAttribute("height", "50");
fo.setAttribute("x", x);
fo.setAttribute("y", y);
var body = document.createElementNS("http://www.w3.org/1999/xhtml", "body");
body.innerHTML = "<a href='#' style='background:white;font-size:25px;'> test </a>";
fo.appendChild(body);
element.parent().append(fo);
links.push(fo);
}
}
return {
link: linker,
restrict: 'E'
}
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="testApp">
<svg width="100%" height="100%" viewBox="0 0 1000 300">
<smooth-button></smooth-button>
</svg>
</div>
相關問題
- 1. 使用g ++鏈接模板
- 2. 使用模板鏈接錯誤
- 3. 使用Cygwin建立 - C鏈接模板
- 4. Ember模板鏈接
- 5. Azure ARM模板 - 使用VSTS的鏈接模板Git
- 6. 使用其他模板類鏈接模板類(錯誤LNK2001)
- 7. 角2模板使用console.log
- 8. i18n_patterns和模板中的鏈接
- 9. 鏈接錯誤,當我使用模板和靜態變量
- 10. 使用Laravel 5.2和SimpleStart WrapBootstrap模板設置活動鏈接
- 11. AngularJS:指令使用模板和控制器/鏈接
- 12. C++:鏈接器問題使用模板和boost :: bind
- 13. 錯誤:「使用類模板需要模板類參數」使用鏈接列表
- 14. 使用C++鏈表模板
- 15. 模板鏈接問題C++
- 16. 模板之間的鏈接
- 17. 鏈接錯誤 - 新模板
- 18. Angular:鏈接transcluded模板
- 19. 鏈接列表模板
- 20. 未鏈接的Jade模板
- 21. C++模板,鏈接錯誤
- 22. 鏈接錯誤類模板
- 23. 角4和NG-模板
- 24. 模板與流星和角
- 25. 鏈接的角度指令屬性的模板與玉
- 26. 角模板:NG-重複逗號分隔的鏈接
- 27. 鏈接的承諾和角
- 28. Django在模板中啓用URL鏈接
- 29. 如果兩個模板的類型鏈接,如何使用策略模板?
- 30. Webpack CSS模塊和角度模板