首页

中央气象台近十年设计精品集

前端达人

今天整理网站类作品,看到给中央气象台近十年设计的诸多网页和系统。这几天每天关注鄱阳湖洪水状况,2018年改版时,有一版的设计方案,我设计了洪水到来时的专题,图片视频,动画提醒居民注意事项。同事们也花了许多精力时间做了大量工作。

作为公民,我们在用我们擅长的设计去服务社会,在这个过程中形成自己的积淀。这是不可用金钱来衡量的价值。

微信图片_20200721174610.png


微信图片_20200721174606.jpg


微信图片_20200721174603.png

微信图片_20200721174559.png

微信图片_20200721174555.png

微信图片_20200721174551.png

微信图片_20200721174547.png

微信图片_20200721174543.png

微信图片_20200721174539.png

微信图片_20200721174614.png







作者:蓝蓝

  蓝蓝设计www.lanlanwork.com )是一家专注而深入的界面设计公司,为期望卓越的国内外企业提供卓越的UI界面设计BS界面设计 、 cs界面设计 、 ipad界面设计 、 包装设计 、 图标定制 、 用户体验 、交互设计、 网站建设 平面设计服

ifram内嵌套tab选项卡以及iframe切换的一系列问题

前端达人

最近在项目中遇到这样一个问题

点击查看原图

当页面加载完毕后由于选项卡的另外两张属于display:none;状态  所以另外两张选项卡内echarts的宽高都会变成默认100*100


查阅了很多网上的案例,得出一下一些解决方案:

1:

原因很简单,在tab页中,图表的父容器div是隐藏的(display:none),图表在执行js初始化的时候找不到这个元素,所以自动将“100%”转成了“100”,最后计算出来的图表就成了100px

解决办法:

找一个在tab页的切换操作中不会隐藏的父容器,把它的宽度的具体值取出后在初始化图表之前直接赋给图表


1 $("#chartMain").css('width',$("#TabContent").width());//获取父容器的宽度具体数值直接赋值给图表以达到宽度100%的效果 2 var Chart = echarts.init(document.getElementById('chartMain')); 3 4 // 指定图表的配置项和数据 5 option = { ...配置项和数据 }; 6 7 // 使用刚指定的配置项和数据显示图表。 8 Chart.setOption(option);

2:mychart.resize() 重新渲染高度

3: 后来我想到了问题所在,既然高度是因为display:none;导致的 那大可不必设置这个属性,但是在页面渲染完毕后加上即可

所以取消了选项卡的display:none; 但在页面加载完毕后 
window.οnlοad=function(){

根基id在添加css display:none;

}

即可解决,

分割线

--------------------------------------------------------------------- 

接下来解决一下ifram内外通讯 互相通讯赋值ifram src 和高度问题 

ui界面设计之网站设计案例欣赏(一)

前端达人

   蓝蓝设计的同事们,在积累了一定经验的同时,也在不断的学习和丰富关于网站及数据可视化的表达方式,搜集资料,作为大屏及数据可视化界面设计资料的参考,分享如下:


希望这篇文章可以帮到您!

微信图片_20200612102206.jpg

——-- 网站ui设计 --——


微信图片_20200612102221.png

——-- 网站ui设计 --——

微信图片_20200612102228.png

——-- 网站ui设计 --——

微信图片_20200612102230.png

——-- 网站ui设计 --——

微信图片_20200612102253.jpg

——-- 网站ui设计 --——

微信图片_20200617141554.png

——-- 网站ui设计 --——

微信图片_20200617141607.png

——-- 网站ui设计 --——

微信图片_20200617141610.jpg

——-- 网站ui设计 --——

微信图片_20200617141635.jpg

——-- 网站ui设计 --——

微信图片_20200617141713.png

——-- 网站ui设计 --——

微信图片_20200617141716.jpg

——-- 网站ui设计 --——

微信图片_20200617141718.jpg

——-- 网站ui设计 --——

微信图片_20200621205433.png

——-- 网站ui设计 --——

微信图片_20200621205436.png

——-- 网站ui设计 --——

微信图片_20200621205438.png

——-- 网站ui设计 --——

微信图片_20200621205445.png

——-- 网站ui设计 --——

微信图片_20200621205448.jpg

——-- 网站ui设计 --——

微信图片_20200621205451.jpg

——-- 网站ui设计 --——

微信图片_20200621205456.jpg

——-- 网站ui设计 --——

微信图片_20200621205511.jpg

——-- 网站ui设计 --——

微信图片_20200621205514.jpg

——-- 网站ui设计 --——

微信图片_20200621205518.jpg

——-- 网站ui设计 --——

微信图片_20200621205521.jpg

——-- 网站ui设计 --——

微信图片_20200621205524.jpg

——-- 网站ui设计 --——

微信图片_20200621205527.jpg

——-- 网站ui设计 --——

微信图片_20200621205530.png

——-- 网站ui设计 --——微信图片_20200621205532.jpg

——-- 网站ui设计 --——

微信图片_20200621205535.png

——-- 网站ui设计 --——

微信图片_20200621205538.jpg

——-- 网站ui设计 --——

微信图片_20200621205541.png

——-- 网站ui设计 --——


(图片均来源于网络)

  蓝蓝设计www.lanlanwork.com )是一家专注而深入的界面设计公司,为期望卓越的国内外企业提供卓越的UI界面设计BS界面设计 、 cs界面设计 、 ipad界面设计 、 包装设计 、 图标定制 、 用户体验 、交互设计、 网站建设 平面设计服



    更多精彩文章:


手机appUI界面设计赏析(三)

前端达人

与传统PC桌面不同,手机屏幕的尺寸更加小巧操作,方式也已触控为主,APP界面设计不但要保证APP功能的完整性和合理性,又要保证APP的功能性和实用性,在保证其拥有流畅的操作感受的同时,满足人们的审美需求。

接下来为大家介绍几款手机appui界面设计

微信图片_20200612102238.jpg

   --手机appUI设计--

微信图片_20200612102245.jpg

   --手机appUI设计--

微信图片_20200617141551.png

   --手机appUI设计--微信图片_20200617141556.png

   --手机appUI设计--

微信图片_20200617141604.png

   --手机appUI设计--

微信图片_20200617141721.jpg

   --手机appUI设计--

微信图片_20200617141724.jpg

   --手机appUI设计--

微信图片_20200621205421.png

   --手机appUI设计--

微信图片_20200621205454.jpg

   --手机appUI设计--


(以上图片均来源于网络)



  蓝蓝设计www.lanlanwork.com )是一家专注而深入的界面设计公司,为期望卓越的国内外企业提供卓越的UI界面设计BS界面设计 、 cs界面设计 、 ipad界面设计 、 包装设计 、 图标定制 、 用户体验 、交互设计、 网站建设 平面设计服



  更多精彩文章:

       手机appUI界面设计赏析(一)

       手机appUI界面设计赏析(二)


大数据可视化设计赏析(五)

前端达人

  随着大数据产业的发展,越来越多的公司开始实现数据资源的管理和应用,尤其是一些在日常生活中经常使用大屏幕的大中型企业。此时,用户界面设计者需要呈现相应的视觉效果。接下来为大家介绍大屏可视化的UI设计。

微信图片_20200612102133.jpg

 --大屏UI设计--

微信图片_20200612102139.jpg

 --大屏UI设计--

微信图片_20200612102157.jpg

 --大屏UI设计--

微信图片_20200612102200.jpg

 --大屏UI设计--

微信图片_20200612102203.jpg

 --大屏UI设计--

微信图片_20200612102232.png

 --大屏UI设计--

微信图片_20200612102235.png

 --大屏UI设计--

微信图片_20200612102248.jpg

 --大屏UI设计--

微信图片_20200612102250.png

 --大屏UI设计--

微信图片_20200617141542.jpg

 --大屏UI设计--

微信图片_20200617141618.jpg

 --大屏UI设计--

微信图片_20200617141621.jpg

 --大屏UI设计--

微信图片_20200617141621.jpg

 --大屏UI设计--

微信图片_20200617141624.jpg

 --大屏UI设计--

微信图片_20200617141628.jpg

 --大屏UI设计--

微信图片_20200617141631.jpg

 --大屏UI设计--

微信图片_20200617141649.jpg

 --大屏UI设计--

微信图片_20200617141652.jpg

 --大屏UI设计--

微信图片_20200617141655.jpg

 --大屏UI设计--

微信图片_20200617141706.jpg

 --大屏UI设计--

微信图片_20200617141709.jpg

 --大屏UI设计--

微信图片_20200621205413.png

 --大屏UI设计--



(图片均来源于网络)

  蓝蓝设计www.lanlanwork.com )是一家专注而深入的界面设计公司,为期望卓越的国内外企业提供卓越的UI界面设计BS界面设计 、 cs界面设计 、 ipad界面设计 、 包装设计 、 图标定制 、 用户体验 、交互设计、 网站建设 平面设计服



    更多精彩文章:

       

 大数据可视化设计赏析(一)

  大数据可视化设计赏析(二)

  大数据可视化设计赏析(三)

  大数据可视化设计赏析(四)

  大数据可视化设计赏析(五)

  大数据可视化设计赏析(六)

  大数据可视化设计赏析(七)



大数据可视化设计赏析(四)

前端达人

   随着大数据产业的发展,越来越多的公司开始实现数据资源的管理和应用,尤其是一些在日常生活中经常使用大屏幕的大中型企业。此时,用户界面设计者需要呈现相应的视觉效果。接下来为大家介绍大屏可视化的UI设计。

微信图片_20200607232854.jpg

 --大屏UI设计--

微信图片_20200607232903.jpg

 --大屏UI设计--

微信图片_20200607232908.jpg

 --大屏UI设计--

微信图片_20200607232911.jpg

 --大屏UI设计--

微信图片_20200607232913.jpg

 --大屏UI设计--

微信图片_20200607232916.jpg

 --大屏UI设计--

点击查看原图

 --大屏UI设计--

微信图片_20200607232926.jpg

 --大屏UI设计--

点击查看原图

 --大屏UI设计--

点击查看原图

 --大屏UI设计--

点击查看原图

 --大屏UI设计--

点击查看原图

 --大屏UI设计--

点击查看原图

 --大屏UI设计--

微信图片_20200607232941.jpg

 --大屏UI设计--

点击查看原图

 --大屏UI设计--

点击查看原图

 --大屏UI设计--

点击查看原图

 --大屏UI设计--

点击查看原图

 --大屏UI设计--

点击查看原图

 --大屏UI设计--

点击查看原图

 --大屏UI设计--


(图片均来源于网络)

  蓝蓝设计www.lanlanwork.com )是一家专注而深入的界面设计公司,为期望卓越的国内外企业提供卓越的UI界面设计BS界面设计 、 cs界面设计 、 ipad界面设计 、 包装设计 、 图标定制 、 用户体验 、交互设计、 网站建设 平面设计服



    更多精彩文章:

       

 大数据可视化设计赏析(一)

  大数据可视化设计赏析(二)

  大数据可视化设计赏析(三)

  大数据可视化设计赏析(四)

  大数据可视化设计赏析(五)

  大数据可视化设计赏析(六)

  大数据可视化设计赏析(七)




React 简单介绍

前端达人

why React?

React是Facebook开发的一款JS库,那么Facebook为什么要建造React呢,主要为了解决什么问题,通过这个又是如何解决的?

从这几个问题出发我就在网上搜查了一下,有这样的解释。

Facebook认为MVC无法满足他们的扩展需求,由于他们非常巨大的代码库和庞大的组织,使得MVC很快变得非常复复杂,每当需要添加一项新的功能或特性时,系统的复杂度就成级数增长,致使代码变得脆弱和不可预测,结果导致他们的MVC正在土崩瓦解。认为MVC不适合大规模应用,当系统中有很多的模型和相应的视图时,其复杂度就会迅速扩大,非常难以理解和调试,特别是模型和视图间可能存在的双向数据流动。

解决这个问题需要“以某种方式组织代码,使其更加可预测”,这通过他们(Facebook)提出的Flux和React已经完成。


Flux是一个系统架构,用于推进应用中的数据单向流动。React是一个JavaScript框架,用于构建“可预期的”和“声明式的”Web用户界面,它已经使Facebook更快地开发Web应用


对于Flux,目前还没怎么研究,不怎么懂,这里就先把Flux的图放上来,有兴趣或者了解的可以再分享下,这里主要说下React。

微信截图_20200602202548.png

那么React是解决什么问题的,在官网可以找到这样一句话:

We built React to solve one problem: building large applications with data that changes over time.


构建那些数据会随时间改变的大型应用,做这些,React有两个主要的特点:

  1. 简单
    简单的表述任意时间点你的应用应该是什么样子的,React将会自动的管理UI界面更新当数据发生变化的时候。
  2. 声明式
    在数据发生变化的时候,React从概念上讲与点击了F5一样,实际上它仅仅是更新了变化的一部分而已。
    React是关于构造可重用组件的,实际上,使用React你做的仅仅是构建组建。通过封装,使得组件代码复用、测试以及关注点分离更加容易。

另外在React官网上,通过《Why did we build React?》为什么我们要建造React的文档中还可以了解到以下四点:

  • React不是一个MVC框架
  • React不使用模板
  • 响应式更新非常简单
  • HTML5仅仅是个开始

React主要的原理

Virtual DOM 虚拟DOM
传统的web应用,操作DOM一般是直接更新操作的,但是我们知道DOM更新通常是比较昂贵的。而React为了尽可能减少对DOM的操作,提供了一种不同的而又强大的方式来更新DOM,代替直接的DOM操作。就是Virtual DOM,一个轻量级的虚拟的DOM,就是React抽象出来的一个对象,描述dom应该什么样子的,应该如何呈现。通过这个Virtual DOM去更新真实的DOM,由这个Virtual DOM管理真实DOM的更新。

为什么通过这多一层的Virtual DOM操作就能更快呢? 这是因为React有个diff算法,更新Virtual DOM并不保证马上影响真实的DOM,React会等到事件循环结束,然后利用这个diff算法,通过当前新的dom表述与之前的作比较,计算出最小的步骤更新真实的DOM。


微信截图_20200602202557.png

Components 组件
在DOM树上的节点被称为元素,在这里则不同,Virtual DOM上称为commponent。Virtual DOM的节点就是一个完整抽象的组件,它是由commponents组成。


component 的使用在 React 里极为重要, 因为 components 的存在让计算 DOM diff 更。

State 和 Render
React是如何呈现真实的DOM,如何渲染组件,什么时候渲染,怎么同步更新的,这就需要简单了解下State和Render了。state属性包含定义组件所需要的一些数据,当数据发生变化时,将会调用Render重现渲染,这里只能通过提供的setState方法更新数据。

好了,说了这么多,下面看写代码吧,先看一个官网上提供的Hello World的示例:


<!DOCTYPE html> <html> <head> <script src="http://fb.me/react-0.12.1.js"></script> <script src="http://fb.me/JSXTransformer-0.12.1.js"></script> </head> <body> <div id="example"></div> <script type="text/jsx"> React.render( <h1>Hello, world!</h1>,
        document.getElementById('example')
      ); </script> </body> </html>

这个很简单,浏览器访问,可以看到Hello, world!字样。JSXTransformer.js是支持解析JSX语法的,JSX是可以在Javascript中写html代码的一种语法。如果不喜欢,React也提供原生Javascript的方法。

再来看下另外一个例子:



<html>
    <head>
        <title>Hello React</title>
        <script src="http://fb.me/react-0.12.1.js"></script>
        <script src="http://fb.me/JSXTransformer-0.12.1.js"></script>
        <script src="http://code.jquery.com/jquery-1.10.0.min.js"></script>
        <script src="http://cdnjs.cloudflare.com/ajax/libs/showdown/0.3.1/showdown.min.js"></script>
        <style>
        #content{
            width: 800px;
            margin: 0 auto;
            padding: 5px 10px;
            background-color:#eee;
        }
        .commentBox h1{
            background-color: #bbb;
        }
        .commentList{
            border: 1px solid yellow;
            padding:10px;
        }
        .commentList .comment{
            border: 1px solid #bbb;
            padding-left: 10px;
            margin-bottom:10px;
        }
        .commentList .commentAuthor{
            font-size: 20px;
        }
        .commentForm{
            margin-top: 20px;
            border: 1px solid red;
            padding:10px;
        }
        .commentForm textarea{
            width:100%;
            height:50px;
            margin:10px 0 10px 2px;
        }
        </style>
    </head>
    <body>
        <div id="content"></div>
        <script type="text/jsx">
        var staticData = [
            {author: "张飞", text: "我在写一条评论~!"},
            {author: "关羽", text: "2货,都知道你在写的是一条评论。。"},
            {author: "刘备", text: "哎,咋跟这俩逗逼结拜了!"}
        ];

        var converter = new Showdown.converter();//markdown

        /** 组件结构:
            <CommentBox>
                <CommentList>
                    <Comment />
                </CommentList>
                <CommentForm />
            </CommentBox>
        */
        //评论内容组件
        var Comment = React.createClass({
            render: function (){
                var rawMarkup = converter.makeHtml(this.props.children.toString());
                return (
                    <div className="comment">
                        <h2 className="commentAuthor">
                            {this.props.author}:
                        </h2>
                        <span dangerouslySetInnerHTML={{__html: rawMarkup}} />
                    </div>
                );
            }
        });
        //评论列表组件
        var CommentList = React.createClass({
            render: function (){
                var commentNodes = this.props.data.map(function (comment){
                    return (
                        <Comment author={comment.author}>
                            {comment.text}
                        </Comment>
                    );
                });

                return (
                    <div className="commentList">
                        {commentNodes}
                    </div>
                );
            }
        });

        //评论表单组件
        var CommentForm = React.createClass({
            handleSubmit: function (e){
                e.preventDefault();
                var author = this.refs.author.getDOMNode().value.trim();
                var text = this.refs.text.getDOMNode().value.trim();
                if(!author || !text){
                    return;
                }
                this.props.onCommentSubmit({author: author, text: text});
                this.refs.author.getDOMNode().value = '';
                this.refs.text.getDOMNode().value = '';
                return;
            },
            render: function (){
                return (
                    <form className="commentForm" onSubmit={this.handleSubmit}>
                        <input type="text" placeholder="Your name" ref="author" /><br/>
                        <textarea type="text" placeholder="Say something..." ref="text" ></textarea><br/>
                        <input type="submit" value="Post" />
                    </form>
                );
            }
        });

        //评论块组件
        var CommentBox = React.createClass({
            loadCommentsFromServer: function (){
                this.setState({data: staticData});
                /*
                方便起见,这里就不走服务端了,可以自己尝试
                $.ajax({
                    url: this.props.url + "?_t=" + new Date().valueOf(),
                    dataType: 'json',
                    success: function (data){
                        this.setState({data: data});
                    }.bind(this),
                    error: function (xhr, status, err){
                        console.error(this.props.url, status, err.toString());
                    }.bind(this)
                });
                */
            },
            handleCommentSubmit: function (comment){
                //TODO: submit to the server and refresh the list
                var comments = this.state.data;
                var newComments = comments.concat([comment]);

                //这里也不向后端提交了
                staticData = newComments;

                this.setState({data: newComments});
            },
            //初始化 相当于构造函数
            getInitialState: function (){
                return {data: []};
            },
            //组件添加的时候运行
            componentDidMount: function (){
                this.loadCommentsFromServer();
                this.interval = setInterval(this.loadCommentsFromServer, this.props.pollInterval);
            },
            //组件删除的时候运行
            componentWillUnmount: function() {
                clearInterval(this.interval);
            },
            //调用setState或者父级组件重新渲染不同的props时才会重新调用
            render: function (){
                return (
                    <div className="commentBox">
                        <h1>Comments</h1>
                        <CommentList data={this.state.data}/>
                        <CommentForm onCommentSubmit={this.handleCommentSubmit} />
                    </div>
                );
            }
        });

        //当前目录需要有comments.json文件
        //这里定义属性,如url、pollInterval,包含在props属性中
        React.render(
            <CommentBox url="comments.json" pollInterval="2000" />,
            document.getElementById("content")
        );
        </script>
    </body>
</html>


乍一看挺多,主要看脚本部分就可以了。方便起见,这里都没有走后端。定义了一个全局的变量staticData,可权当是走服务端,通过浏览器的控制台改变staticData的值,查看下效果,提交一条评论,查看下staticData的值的变化。

应用情况

国外应用的较多,facebook、Yahoo、Reddit等。在github可以看到一个列表Sites-Using-React,国内的话,查了查,貌似比较少,目前知道的有一个杭州大搜车。大多技术要在国内应用起来一般是较慢的,不过React确实感觉比较特殊,特别是UI的组件化和Virtual DOM的思想,我个人比较看好,有兴趣继续研究研究。

比较分析

和其他一些js框架相比,React怎样,比如Backbone、Angular等。

  • React不是一个MVC框架,它是构建易于可重复调用的web组件,侧重于UI, 也就是view层
  • 其次React是单向的从数据到视图的渲染,非双向数据绑定
  • 不直接操作DOM对象,而是通过虚拟DOM通过diff算法以最小的步骤作用到真实的DOM上。
  • 不便于直接操作DOM,大多数时间只是对 virtual DOM 进行编程

作者:RK_CODER
链接:https://www.jianshu.com/p/ae482813b791
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

手机appUI界面设计赏析(二)

前端达人



与传统PC桌面不同,手机屏幕的尺寸更加小巧操作,方式也已触控为主,APP界面设计不但要保证APP功能的完整性和合理性,又要保证APP的功能性和实用性,在保证其拥有流畅的操作感受的同时,满足人们的审美需求。

接下来为大家介绍几款手机appui界面设计



点击查看原图

                                                                                    --手机appUI设计--

微信图片_20200602200240.jpg

                                                                                     --手机appUI设计--

微信图片_20200602200243.png

                                                                                   --手机appUI设计--

微信图片_20200602200246.png

                                                                                          --手机appUI设计--

点击查看原图

                                                                                             --手机appUI设计--

点击查看原图

                                                                                          --手机appUI设计--

点击查看原图

                                                                                     --手机appUI设计--

点击查看原图

                                                                                           --手机appUI设计--

点击查看原图

                                                                                      --手机appUI设计--

微信图片_20200602200304.jpg

                                                                                           --手机appUI设计--

微信图片_20200602200306.jpg

                                                                                    --手机appUI设计--

微信图片_20200602200309.jpg

                                                                                --手机appUI设计--

微信图片_20200602200311.jpg

                                                                                  --手机appUI设计--

微信图片_20200602200454.jpg

                                                                                    --手机appUI设计--

微信图片_20200602200457.jpg

                                                                               --手机appUI设计--

微信图片_20200602200459.jpg

                                                                                    --手机appUI设计--

微信图片_20200602200501.jpg

                                                                                           --手机appUI设计--

微信图片_20200602200504.jpg

                                                                                          --手机appUI设计--


(以上图片均来源于网络)



  蓝蓝设计www.lanlanwork.com )是一家专注而深入的界面设计公司,为期望卓越的国内外企业提供卓越的UI界面设计BS界面设计 、 cs界面设计 、 ipad界面设计 、 包装设计 、 图标定制 、 用户体验 、交互设计、 网站建设 平面设计服




    更多精彩文章:

       手机appUI界面设计赏析(一)

    





Three.js 基础入门

前端达人

课程介绍

近些年,浏览器的功能越来越强大,渐渐得成为了复杂应用和图形的平台。同时,现有大多数浏览器实现了对 WebGL 的支持,但要直接使用 WebGL 相关接口进行开发,则需要学习复杂的着色器语言,且开发周期长,不利于项目的快速开发。

面对这种情况,Three.js 应运而生,它不但对 WebGL 进行了封装,将复杂的接口简单化,而且基于面向对象思维,将数据结构对象化,非常方便我们开发。Three.js 的发展十分迅速,然而配套的学习材料却比较匮乏,于是便有了当前的这个课程。

本课程作为入门课程,不会深入做源码解析,主要协助初学者了解 Three.js 的数据结构,基础 API 以及相关辅助插件的使用。帮助初学者达到快速入门的目的。

本课程共包含四大部分。

第一部分(第01-02课),入门前概述,带你初步认识 Three.js、框架选择标准、开发工具,源码获取,实现一个“Hello World”辅助工具。
第二部分(第03-08课),基础功能篇,主要包括 Object3D、Scene、Mesh、Group、Geometry、Materials、Lights、Cameras、粒子等相关功能的介绍。
第三部分(第09-15课),进阶篇,主要包括 Controls、Loaders、Animation、Tween、核心对象,与场景之间的交互以及性能优化介绍。
第四部分(第16课),实战篇,带大家利用所学知识实现一个 3D 小案例。

作者简介

郑世强,现就职于上海某网络公司担任前端工程师,CSDN 博客作者,长期活跃于各大论坛,擅长前端开发、WEBGL 开发。

课程内容

第01课:入门前准备

什么是 WebGL?

WebGL(Web 图形库)是一种 JavaScript API,用于在任何兼容的 Web 浏览器中呈现交互式 3D 和 2D 图形,而无需使用插件。WebGL 通过引入一个与 OpenGL ES 2.0 紧密相符合的 API,可以在 HTML5 <canvas> 元素中使用(简介引自 MDN)。

以我的理解,WebGL 给我们提供了一系列的图形接口,能够让我们通过 JavaScript 去使用 GPU 来进行浏览器图形渲染的工具。


什么是 Three.js?

Three.js 是一款 webGL 框架,由于其易用性被广泛应用。Three.js 在 WebGL 的 API 接口基础上,又进行的一层封装。它是由居住在西班牙巴塞罗那的程序员 Ricardo Cabbello Miguel 所开发,他更为人知的网名是 Mr.doob。



Three.js 以简单、直观的方式封装了 3D 图形编程中常用的对象。Three.js 在开发中使用了很多图形引擎的高级技巧,极大地提高了性能。另外,由于内置了很多常用对象和极易上手的工具,Three.js 的功能也非常强大。最后,Three.js 还是完全开源的,你可以在 GitHub 上找到它的源代码,并且有很多人贡献代码,帮助 Mr.doob 一起维护这个框架。

WEBGL 和 Three.js 的关系

WebGL 原生 API 是一种非常低级的接口,而且还需要一些数学和图形学的相关技术。对于没有相关基础的人来说,入门真的很难,Three.js 将入门的门槛降低了一大截,对 WebGL 进行封装,简化我们创建三维动画场景的过程。只要你有一定的 JavaScript 基础,有一定的前端经验,我坚信,用不了多长时间,三维制作会变得很简单。



用最简单的一句话概括:WebGL 和 Three.js 的关系,相当于 JavaScript 和 jQuery 的关系。

功能概述

Three.js 作为 WebGL 框架中的佼佼者,由于它的易用性和扩展性,使得它能够满足大部分的开发需求,Three.js 的具体功能如下:


Three.js 掩盖了 3D 渲染的细节:Three.js 将 WebGL 原生 API 的细节抽象化,将 3D 场景拆解为网格、材质和光源(即它内置了图形编程常用的一些对象种类)。
面向对象:开发者可以使用上层的 JavaScript 对象,而不是仅仅调用 JavaScript 函数。
功能非常丰富:Three.js 除封装了 WebGL 原始 API 之外,Three.js 还包含了许多实用的内置对象,可以方便地应用于游戏开发、动画制作、幻灯片制作、髙分辨率模型和一些特殊的视觉效果制作。
速度很快:Three.js 采用了 3D 图形最佳实践来保证在不失可用性的前提下,保持极高的性能。
支持交互:WebGL 本身并不提供拾取(Picking)功能(即是否知道鼠标正处于某个物体上)。而 Three.js 则固化了拾取支持,这就使得你可以轻松为你的应用添加交互功能。
包含数学库:Three.js 拥有一个强大易用的数学库,你可以在其中进行矩阵、投影和矢量运算。
内置文件格式支持:你可以使用流行的 3D 建模软件导出文本格式的文件,然后使用 Three.js 加载,也可以使用 Three.js 自己的 JSON 格式或二进制格式。
扩展性很强:为 Three.js 添加新的特性或进行自定义优化是很容易的事情。如果你需要某个特殊的数据结构,那么只需要封装到 Three.js 即可。
支持HTML5 Canvas:Three.js 不但支持 WebGL,而且还支持使用 Canvas2D、Css3D 和 SVG 进行渲染。在未兼容 WebGL 的环境中可以回退到其它的解决方案。


缺点

虽然 Three.js 的优势很大,但是它也有它的不足之处:



官网文档非常粗糙,对于新手极度不友好。

国内的相关资源匮乏。

Three.js 所有的资料都是以英文格式存在,对国内的朋友来说又提高了门槛。

Three.js 不是游戏引擎,一些游戏相关的功能没有封装在里面,如果需要相关的功能需要进行二次开发。


Three.js 与其他库的对比

随着 WebGL 的迅速发展,相关的 WebGL 库也丰富起来,接下来介绍几个比较火的 WebGL 库。



与 Babylon.js 对比

Babylon.JS 是最好的 JavaScript 3D 游戏引擎,它能创建专业级三维游戏。主要以游戏开发和易用性为主。与 Three.js 之间的对比:



Three.js 比较全面,而 Babylon.js 专注于游戏方面。

Babylon.js 提供了对碰撞检测、场景重力、面向游戏的照相机,Three.js 本身不自带,需要依靠引入插件实现。

对于 WebGL 的封装,双方做得各有千秋,Three.js 浅一些,好处是易于扩展,易于向更底层学习;Babylon.js 深一些,好处是易用扩展难度大一些。

Three.js 的发展依靠社区推动,出来的比较早,发展比较成熟,Babylon.js 由微软公司在2013推出,文档和社区都比较健全,国内还不怎么火。


与 PlayCanvas 对比

PlayCanvas 是一个基于 WebGL 游戏引擎的企业级开源 JavaScript 框架,它有许多的开发工具能帮你快速创建 3D 游戏。与 Three.js 之间的对比:



PlayCanvas 的优势在于它有云端的在线可视化编辑工具。

PlayCanvas 的扩展性不如 Three.js。

最主要是 PlayCanvas 不完全开源,还商业付费。


与 Cesium 对比

Cesium 是国外一个基于 JavaScript 编写的使用 WebGL 的地图引擎,支持 3D、2D、2.5D 形式的地图展示,可以自行绘制图形,高亮区域。与 Three.js 对比:



Cesium 是一个地图引擎,专注于 Gis,相关项目推荐使用它,其它项目还是算了。

至于库的扩展,其它的配套插件,以及周边的资源都不及Three.js。


总结

通过以上信息我们发现,Three.js 在其库的扩展性,易用性以及功能方面有很好的优势。学习 Three.js 入门 3D 开发不但门槛低,而且学习曲线不会太陡,即使以后转向 WebGL 原生开发,也能通过 Three.js 学习到很多有用的知识。



现在最火的微信小游戏跳一跳也是在 Three.js 的基础上开发出来的。所以,Three.js 是我们必须要学的 WebGL 框架。


入门前准备

浏览器兼容


Three.js 可以使用 WebGL 在所有现代浏览器上渲染场景。对于旧版浏览器,尤其是 Internet Explorer 10 及更低版本,您可能需要回退到其他渲染器(CSS2DRenderer、CSS3DRenderer、SVGRenderer、CanvasRenderer)。



注意:如果您不需要支持这些旧版浏览器,则不推荐使用其他渲染器,因为它们速度较慢并且支持的功能比 WebGLRenderer 更少。


点击查看原图

即可下载当前版本的代码及相关案例,文件下载解压后是这样的:


微信截图_20200529213036.png

其中相关文件夹的内容是:

build:里面含有 Three.js 构建出来的 JavaScript 文件,可以直接引入使用,并有压缩版;
docs:Three.js 的官方文档;
editor:Three.js 的一个网页版的模型编辑器;
examples:Three.js 的官方案例,如果全都学会,必将成为大神;
src:这里面放置的全是编译 Three.js 的源文件;
test:一些官方测试代码,我们一般用不到;
utils:一些相关插件;
其他:开发环境搭建、开发所需要的文件,如果不对 Three.js 进行二次开发,用不到。
还有第三种,就是直接去 GitHub 上下载源码,和在官网上下载的代码一样。

hello World

前面说了这么多,准备了这么多,最后,放上我们的第一个案例吧。由此来打开学习 Three.js 的大门:


<!DOCTYPE html><html><head>    <meta charset=utf-8>    <title>我的第一个Three.js案例</title>    <style>        body {            margin: 0;        }        canvas {            width: 100%;            height: 100%;            display: block;        }    </style></head><body onload="init()"><script src="https://cdn.bootcss.com/three.js/92/three.js"></script><script>    //声明一些全局变量    var renderer, camera, scene, geometry, material, mesh;    //初始化渲染器    function initRenderer() {        renderer = new THREE.WebGLRenderer(); //实例化渲染器        renderer.setSize(window.innerWidth, window.innerHeight); //设置宽和高        document.body.appendChild(renderer.domElement); //添加到dom    }    //初始化场景    function initScene() {        scene = new THREE.Scene(); //实例化场景    }    //初始化相机    function initCamera() {        camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.1, 200); //实例化相机        camera.position.set(0, 0, 15);    }    //创建模型    function initMesh() {        geometry = new THREE.BoxGeometry( 2, 2, 2 ); //创建几何体        material = new THREE.MeshNormalMaterial(); //创建材质        mesh = new THREE.Mesh( geometry, material ); //创建网格        scene.add( mesh ); //将网格添加到场景    }    //运行动画    function animate() {        requestAnimationFrame(animate); //循环调用函数        mesh.rotation.x += 0.01; //每帧网格模型的沿x轴旋转0.01弧度        mesh.rotation.y += 0.02; //每帧网格模型的沿y轴旋转0.02弧度        renderer.render( scene, camera ); //渲染界面    }    //初始化函数,页面加载完成是调用    function init() {        initRenderer();        initScene();        initCamera();        initMesh();        animate();    }</script></body></html>

请将上面的代码复制到 HTML 文件中,然后使用浏览器打开,我们就会发现下面的效果:

点击查看原图



————————————————

版权声明:本文为CSDN博主「GitChat的博客」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/valada/java/article/details/80871701







手机appUI界面设计赏析(一)

前端达人

与传统PC桌面不同,手机屏幕的尺寸更加小巧操作,方式也已触控为主,APP界面设计不但要保证APP功能的完整性和合理性,又要保证APP的功能性和实用性,在保证其拥有流畅的操作感受的同时,满足人们的审美需求。

接下来为大家介绍几款手机appui界面设计

点击查看原图

--手机appUI设计--

点击查看原图

--手机appUI设计--

点击查看原图

--手机appUI设计--

点击查看原图

--手机appUI设计--

点击查看原图

--手机appUI设计--

点击查看原图


--手机appUI设计--



微信图片_20200529093951.jpg

--手机appUI设计--


微信图片_20200529093948.png

--手机appUI设计--


微信图片_20200529093946.png


--手机appUI设计--


点击查看原图

--专业又贴心医疗App页面设计--


微信图片_20200529093941.jpg

--专业又贴心医疗App页面设计--微信图片_20200529093938.jpg

--专业又贴心医疗App页面设计--微信图片_20200529093936.jpg

--专业又贴心医疗App页面设计--微信图片_20200529093933.jpg

--专业又贴心医疗App页面设计--微信图片_20200529093930.jpg

--手机appUI设计--


微信图片_20200529093928.jpg

--手机appUI设计--


微信图片_20200529093925.jpg

--手机appUI设计--


微信图片_20200529093921.jpg

--手机appUI设计--


点击查看原图

--手机appUI设计--


点击查看原图

--手机appUI设计--


点击查看原图

--手机appUI设计--


点击查看原图

--手机appUI设计--


点击查看原图

--手机appUI设计--


点击查看原图


--手机appUI设计--


点击查看原图

--手机appUI设计--


点击查看原图


--手机appUI设计--


--手机appUI设计--


点击查看原图



--手机appUI设计--

(以上图片均来源于网络)



  蓝蓝设计www.lanlanwork.com )是一家专注而深入的界面设计公司,为期望卓越的国内外企业提供卓越的UI界面设计BS界面设计 、 cs界面设计 、 ipad界面设计 、 包装设计 、 图标定制 、 用户体验 、交互设计、 网站建设 平面设计服



   更多精彩文章:

       手机appUI界面设计赏析(二)




日历

链接

个人资料

蓝蓝设计的小编 http://www.lanlanwork.com

存档