`
xhload3d
  • 浏览: 209238 次
社区版块
存档分类
最新评论

拓扑图弹力布局呈现Flickr图片搜索结果

阅读更多

十年前有值得分享的图片我都存在Flickr上,可惜yahoo收购了Flickr之后堕落​好多年,最近yahoo在梅姐带领下Flickr团队终于恢复了生机,个人免费存储空间扩充到了1T,界面用户体验也有了很大改进,图片归类及设置Tag比以前易用很多,不过我还是不满意传统改良的Web方式操作图片,我还是喜欢更有交互感的图片操作体验,借助hightopo的HT for Web的拓扑图组件写了个自己满意的搜查Flickr图片例子。

 

http://v.youku.com/v_show/id_XNjg5MjMwMTYw.html

 

Flickr提供了OpenAPI的搜索方式,到网页输入http://api.flickr.com/services/feeds/photos_public.gne?tags=hightopo&format=json的链接,基本原理就一目了然,通过修改url的tags=内容,即可实现搜索不同tag图片的结果。这个url返回的是个jsonp的函数回调jsonFlickrFeed({…}),关于jsonp主要就是用来解决跨域访问的安全问题,我们只需要实现处理数据jsonFlickrFeed等着flickr服务器下发回调即可,jsonp的文章已经很多再次不再详述。

输入框每次输入关键字后我构建了个document.createElement(‘script’),同时避免DOM无限制增长删除了上次查询的结果,当然也不删也问题不大,只不过对我这种有代码洁癖者,看到DOM上有没用的元素我就很不爽。

                searchJS = document.createElement('script');                
                searchJS.setAttribute('src', 'http://api.flickr.com/services/feeds/photos_public.gne?tags=' + tag + '&format=json');
                document.getElementsByTagName('head')[0].appendChild(searchJS);

剩下就很简单了,在jsonFlickrFeed函数里面遍历Flickr返回的图片数组信息,每个元素的title就是图片名称,media.m就是图片路径,根据这些信息创建每个相应的图元,然后通过new ht.layout.ForceLayout(g2d).start()构建一个弹力布局器去自动布局就完事了。

这个视频搜索了hightopo、girl和cr7关键字的效果,再有两个小时西甲的重头戏皇马和巴萨就要开展了,明天还要工作我只能洗洗睡吧,在此祝我喜欢的CR7能进球。

以下为本例子的所有js代码

复制代码
            function init(){                  
                input = ht.Default.createElement('input', null, null, 'hightopo');  
                input.onkeypress = function(e){
                    if (e.keyCode === 13){
                        search();
                    }                    
                };
                items = [
                    { 
                        element: input 
                    },  
                    {
                        label: 'Clear',
                        action: function(){ 
                            dataModel.clear();
                        }
                    }
                ];
                dataModel = new ht.DataModel();                   
                g2d = new ht.graph.GraphView(dataModel); 
                toolbar = new ht.widget.Toolbar(items);
                borderPane = new ht.widget.BorderPane();
                borderPane.setTopView(toolbar);
                borderPane.setCenterView(g2d);                        
                view = borderPane.getView();
                view.className = 'main';
                document.body.appendChild(view);    
                window.addEventListener('resize', function (e) {
                    borderPane.invalidate();
                }, false);          

                forceLayout = new ht.layout.ForceLayout(g2d);     
                forceLayout.start();
            }
            function search() {                
                if (window.searchJS) {
                    document.getElementsByTagName('head')[0].removeChild(searchJS);
                }
                var tag = input.value;
                searchJS = document.createElement('script');                
                searchJS.setAttribute('src', 'http://api.flickr.com/services/feeds/photos_public.gne?tags=' + tag + '&format=json');
                document.getElementsByTagName('head')[0].appendChild(searchJS);
                root = new ht.Node();             
                root.s({
                    'shape': 'circle',
                    'shape.gradient': 'radial.center',
                    'shape.background': '#E74C3C',
                    'label': tag,
                    'label.background': 'yellow',
                    'select.width': 0
                });
                root.setSize(30, 30);
                dataModel.add(root);
                return root;                
            }                        
            function jsonFlickrFeed(datas) { 
                datas.items.forEach(function(item){
                    var node = new ht.Node();
                    node.a(item);
                    node.setName(item.title);        
                    node.s({
                        'label.background': 'yellow'
                    });     
                    node.setImage(item.media.m);
                    dataModel.add(node);                    
                    var edge = new ht.Edge(root, node);
                    edge.s({
                        'edge.3d': true,
                        'edge.width': 4,
                        'edge.color': '#1ABC9C'
                    });
                    dataModel.add(edge);                    
                });
            }     
复制代码

 

1
1
分享到:
评论
1 楼 chen4w 2014-11-23  
Nice work!

相关推荐

    论文研究-基于扩展力学模型的网络拓扑图布局算法.pdf

    针对现有网络拓扑图布局算法多以节点分布均匀为目标,没有考虑边的布局,可能会导致生成的拓扑图中边布局不清晰,...仿真结果表明,扩展力学模型生成的拓扑图节点分布均匀,节点和边之间距离合理,布局效果得到提高。

    网络拓扑自动布局算法

    网络拓扑自动布局算法是计算机科学领域中网络可视化的一个重要组成部分,主要目的是将复杂的网络结构以清晰、有组织的方式呈现出来。在实际应用中,如网络监控、系统管理、网络安全分析等,网络拓扑图的可视化能帮助...

    echart拓扑图单节点拖拽.zip

    在本项目中,我们关注的是如何使用ECharts库创建一个具有单个节点拖放功能的拓扑图。ECharts是一款由百度开发的基于JavaScript的数据可视化库,它支持丰富的图表类型,包括柱状图、折线图、饼图以及拓扑图等。在...

    wpf 网络拓扑图

    **描述分析:** 描述中提到,这个拓扑图采用从左到右的布局方式,意味着设备按照水平方向排列,可能更便于用户理解网络结构。它支持动态生成,意味着可以根据网络状态的变化实时更新拓扑图,这在监控网络状态时非常...

    echarts升级版关系图,网络拓扑图,资源关系图,可添加,搜索(支持高亮显示),排序,删除

    在IT运维和网络管理中,网络拓扑图能够帮助管理员快速识别设备间的连接状态,定位故障,规划网络布局。ECharts提供的网络拓扑图可能包括了自定义节点形状、连线样式,以及动态展示网络流量等功能。 资源关系图通常...

    WPF拓扑图 Topographies

    在拓扑图中,可能需要自定义布局控件以适应树形结构或网状结构。 4. **事件处理**:点击节点触发展开/折叠操作,需要捕获和处理鼠标事件。WPF提供了丰富的事件系统,如`MouseLeftButtonDown`、`MouseEnter`等,用于...

    网络逻辑拓扑图和详细拓扑图

    在网络架构与设计领域中,拓扑图是一种非常重要的工具,它可以帮助我们清晰地了解网络的结构和布局。根据提供的信息,“网络逻辑拓扑图和详细拓扑图”这一主题涉及到了网络拓扑图的不同层次和细节程度。接下来,我们...

    Java网络拓扑图,vue拓扑图管理,组件关系组件机架

    在IT领域,网络拓扑图是一种重要的工具,用于可视化地表示计算机网络的结构和组件之间的连接。Java网络拓扑图的实现通常是通过编程语言(如Java)与前端框架(如Vue.js)结合来完成的,以创建交互式的、可自定义的...

    Qt实现网络拓扑图

    - 自定义布局算法,如树形布局或力导向布局,可以动态调整节点的位置,保持拓扑图的清晰度。 3. **事件处理** - Qt的事件驱动模型使得处理用户输入变得简单。例如,通过重载`mouseMoveEvent()`和`...

    QT实现网络拓扑图

    在网络拓扑图中,我们可以将每台网络设备表示为一个QGraphicsPixmapItem,加载设备的图标或图片作为其视觉表现。通过设置item的位置和大小,我们可以精确地定位每个设备在拓扑图上的位置。 QGraphicsLineItem则用于...

    阿里云网络拓扑图

    阿里云网络拓扑图阿里云网络拓扑图阿里云网络拓扑图阿里云网络拓扑图阿里云网络拓扑图阿里云网络拓扑图阿里云网络拓扑图阿里云网络拓扑图阿里云网络拓扑图阿里云网络拓扑图阿里云网络拓扑图阿里云网络拓扑图阿里云...

    qunee网络拓扑图

    在IT领域,网络拓扑图是表示网络设备、服务器、线路等元素间连接关系的图形化表示,对于网络管理员来说,它至关重要,因为它能够直观地展示网络结构,帮助理解和管理复杂的网络环境。 Qunee网络拓扑图主要由以下几...

    java实现拓扑图插件 - 1(已亲测)

    在IT领域,拓扑图是一种重要的可视化工具,用于表示网络、系统或软件架构中的组件及其相互关系。在Java中,实现这样的拓扑图插件可以帮助开发者更好地理解和管理复杂项目。本篇文章将详细介绍如何利用Java来创建拓扑...

    网络拓扑图

    网络系统拓扑图网络系统拓扑图网络系统拓扑图网络系统拓扑图网络系统拓扑图网络系统拓扑图网络系统拓扑图网络系统拓扑图网络系统拓扑图网络系统拓扑图网络系统拓扑图网络系统拓扑图网络系统拓扑图网络系统拓扑图网络...

    java实现拓扑图插件 - 2(已亲测)

    3. **JTopo库**:JTopo提供了多种拓扑图元素,如节点、链路和容器,以及布局算法,如层次布局、环形布局和力导向布局。这些元素和布局可以帮助开发者轻松地表示和组织复杂的关系网络。 4. **事件处理**:JTopo支持...

    网络拓扑图源码

    网络拓扑图是一种图形化表示计算机网络中各个设备、服务器、交换机、路由器以及它们之间连接方式的工具。它能够直观地展示网络的结构,帮助网络管理员理解和管理复杂的网络环境。在IT行业中,网络拓扑图源码是构建...

    使用 jsPlumb 绘制拓扑图的通用方法

    此外,jsPlumb还提供了拖放功能,使得用户能够动态调整拓扑图的布局。 为了开始使用jsPlumb,你需要在HTML文件中引入库的JavaScript和CSS文件。通常,可以从jsPlumb的官方网站下载最新的版本,或者通过CDN链接直接...

    思科实验拓扑图思科实验拓扑图

    思科实验拓扑图思科实验拓扑图思科实验拓扑图思科实验拓扑图思科实验拓扑图

    程序流程网络拓扑图绘制工具

    网络拓扑图是描绘网络设备、线路和连接方式的图表,它清晰地展示了网络结构,有助于理解和优化网络布局。在思科网络设备的环境中,准确绘制拓扑图能够帮助管理员快速定位问题,进行故障排查,同时在规划和扩展网络时...

    c#拓扑图

    在IT行业中,拓扑图是一种重要的可视化工具,用于表示网络、系统或进程之间的关系和连接。在本场景中,我们关注的是"C#拓扑图",这是一个基于C#编程语言实现的拓扑图示例,可能被应用于电信网管系统中,以便监控和...

Global site tag (gtag.js) - Google Analytics