精华内容
下载资源
问答
  • 编程本身是跟年龄无关一件事,不论你现在是十四五岁,还是四五十岁,如果你热爱它,并且愿意持续投入其中,必定会有所收获。...当我在电脑上需要翻译一单词时,我会这样:打开浏览器 => 打开百度翻译...

    a6eb7facc84793c4ab4c57714fcf20cb.png
    编程本身是跟年龄无关的一件事,不论你现在是十四五岁,还是四五十岁,如果你热爱它,并且愿意持续投入其中,必定会有所收获。
    本文就来自编程教室一位“小”读者的投稿(互助学习1群里的同学应该对作者的名字很熟悉吧)。我看着他不停地产出新的代码和技术文章,不禁感叹“后生可畏”。
    这是一个爬虫基础分析和操作的开发案例,在此分享给大家。

    当我在电脑上需要翻译一个单词时,我会这样做:

    打开浏览器 => 打开百度翻译 => 输入单词 => 得到翻译

    不过有时候,当我在命令行环境下写代码的时候,懒得再切换到浏览器里等待页面的加载。

    于是我就想,能否用万能的 python 制作一个命令行下的翻译工具呢?

    说干就干!

    网上搜索了点信息,加上一顿操作,最终被我捣鼓出来了。来看下最终的效果:

    63f7981b08a1d26c5cfbd1bb0cdf0bd8.png

    在这个工具中,我用了百度有道以及谷歌(可选)的翻译。

    开发思路

    其中获取有道翻译和百度翻译的原理都差不多,这里我们选取百度翻译来玩耍一下啦:

    首先打开百度翻译:http://fanyi.baidu.com

    a2a5370faa5adfd60327dd85589af3e6.png

    接下来右键点击检查,选择 Network 中的 XHR (向服务器发送的数据请求)。然后我们在输入框里输入 save 这个单词,我们可以看到一时间这里面多了几个 sug 标签,点开一看:

    6390cc586c2793aa307de07465f6b4a8.png

    可以看到,这个 sug 请求里面就有我们想要的数据。点进去,Request URL 就是我们需要请求的网址,另外在 Request Method 看到是 POST 方式,也就是提交表单:

    a2576392e4e7560399e141dd3a049b7f.png

    移到最后,我们看见了提交的表单参数:

    88b05a08229d9a3d482f24d51700012f.png

    Form Data 中,我们看见表单是一个字典:{'kw': 'save'},这里 save 是我们自己输入的,也就是我们要查询的单词,因此我们使用 requests.post 来模拟这个请求:

    # 网址和表单
    

    我们可以试着打印出返回的东西,你会发现是以 JSON 格式返回的,因此需要引入内置库 json 来解析:

    content 

    在打印出的 json 格式的文本中我们发现翻译结果在['data'][0]['v'](刚刚的图片里我们也看见了),接下来提取并返回:

    result 

    这样就完成了提交表单了,实现百度翻译了。

    这里用到的就是一些常用的爬虫分析和操作,有道翻译也基本类似,不再赘述,具体操作可参加文末给出的完整代码。

    接下来我们来看看与众不同的谷歌翻译,这个玩意实在有些复杂。谷歌翻译是有 api 的,但是要钱……我不想付钱……网上有大佬给出了解决方案(这里我们简单地看一下原理):

    a84c218b4aa6927d99597529b2a034aa.png

    按照近似百度翻译的方式操作,我们看到这里多出了一个请求,这里面有我们想要的翻译结果:

    1d180e362e4105b238d8c6a14548e5e4.png

    我们回到之前的 Request URL 看一下,发现前面的直接复制就好了,q 是我们需要翻译的词,但是这个 tk 参数却是个棘手的参数。我代码里用到的解法是网上的,仿照谷歌翻译页面上的提供的函数,用 JavaScript 去计算出了这个参数(我怀疑他就是拿的前端源码,没仔细对照)。

    那么如何在 python 中执行 JavaScript 代码呢,我们可以通过 pyexecjs 这个库(注意这个库导入名是 execjs)。这个部分的源码就在 Py4Js 这个类里边了。

    特别说明下,因为无法直接使用谷歌翻译,所以我把它做成了可选项,默认不会调用。

    使用方法

    我已经将这个项目发布到了 pypi,你可以通过 pip 命令按如下方式安装:

    pip install quicktranslate

    用起来也是非常的简单(加上 -g 可增加谷歌翻译结果):

    trans -t 你要翻译的东西

    示例:

    你好
    

    获取本案例完整代码,请在公众号“Crossin的编程教室”中回复关键字:翻译

    作者:pynickle

    ------

    一起学,走得远!

    欢迎搜索:Crossin的编程教室

    展开全文
  • 本文转自:DF创客社区-未经许可不可转载原文链接(附件请于原文下方下载):用新款ws2812灯带个简单的窗花-创意生活论坛-DF创客社区​mc.dfrobot.com.cn作者:屌丝王小明 很高兴提前拿到了DF即将上架的新品——...

    3d0348c80ae9c54a7431e516ff251a7e.png

    本文转自:DF创客社区-未经许可不可转载

    原文链接(附件请于原文下方下载):

    用新款ws2812灯带做一个简单的窗花-创意生活论坛-DF创客社区mc.dfrobot.com.cn
    20a7675017c8adb38a79620d5c15860c.png

    作者:屌丝王小明

    很高兴提前拿到了DF即将上架的新品——ws2812灯带,可以让我先试用下。我手上拿的这个就是新的ws2812灯带了,和以前的ws2812的灯带(FIT0352)一样的炫彩,每颗灯珠里都有一个用于控制的ic。每个灯珠都有6个引脚,一边是“+5v”、“Din”、“GND”,另一边的“+5v”、“Do”、“GND”在灯带上其实是连接着下一个灯珠的“Din”一侧的引脚的,就这样,一颗接一颗地连成一串。

    7ccaba61fdcc986104fcfd448c16ab21.gif

    新的ws2812变得更薄更轻了,灯带背面有3m胶,撕下背面的纸后,可以十分方便地贴在窗户、门、桌子、床头、女朋友脸上这些地方。可以在十分美观的情况下,实现我们想要实现的各种炫酷的效果。粘上去后是相当地稳哟。

    287234d1531a8c04ce4e907c962ccd71.gif

    裁剪也更加方便了,轻易地就能将灯珠剪下来,可以实现用单个或几个灯珠,用“点”“线”的形式拼出各种图案和形状。新的ws2812拥有更大的弯曲角度,单粒灯珠就能弯出很大的弧度,更加适用于将其贴在各种曲面甚至球形物体表面。

    4496d7da2aefe7f07c1db6c40fa3c8ab.gif

    15f1ea7924266e2ba2c5a54ff79cac5b.gif

    c508f73e91a0fb5707d3aa2c0824f65a.gif

    马上就是圣诞节了,公司里这一群程序猿和攻城狮,在屏幕面前几十年如一日地禅坐,平日里也没谁说话唠嗑的,都埋头干着自己手上的工作。在这样的寒风萧瑟的时候,又在这样一个寒风萧瑟的环境下的我,决定挺身而出,利用空闲时间来搞点事情,啊哈,就用手上这串新ws2812灯珠。圣诞节还是要有点圣诞节的氛围嘛,于是就把灯珠贴在了窗户上。

    d1c6d258e6d73d4393e1ad063f209ffa.gif

    制作这样的窗花需要用到的材料:

    1. ws2812灯带(我用了169颗)

    2. 微功率太阳能电源管理模块x1

    3. Beetle-ESP32控制器x1

    4. 3.7v锂电池x1

    5. 拨动开关x1

    6. 齿轮变阻器x1

    7. 0.25mm漆包线2米

    8. 0.5mm漆包线5米

    这里先唠叨两句咱们会用到的那个微功率太阳能管理模块(DFR0579),就是下面这个。狠角色呀:

    d29c33319091121352002a8eb5130d39.png

    看完这个模块的资料给我的感觉就是——还有啥它不能的。它可以给3.7v锂电池充电、给3.3v控制器供电、有一对锂电池的输出的焊盘,不仅能用太阳能充电,同时提供一个microusb接口,进行光照不足时的直接充电。大爱呀。

    测量窗户尺寸与灯珠尺寸,做好布局图:

    连线原理图:

    14fe5a397759d7174946ad1f4d29f4f3.png

    Din接beetle的d11口,使用一根0.25mm直径漆包线直接,一根将所有的灯珠上的Din和Do引脚全部串起来。灯珠由锂电池直接供电,由于漆包线负载电流能力有限,所以是分了两组线,上下两行字符分别用了独立的漆包线连接至锂电池正负极。

    制作思路:

    利用太阳能,白天对灯带供电以及对锂电池充电,晚上,就使用锂电池对灯带进行供电,形成一个自给自足的小系统。保持led灯带的常亮。如果所在地区的阳光不够充足,或者阴天情况比较多的话,可以考虑使用呼吸灯或者调低亮度的方式来控制电流大小,来达到灯带保持一直工作的的目的。

    开始制作:

    1.打印一个小模型出来确定灯珠之间的位置摆放,磨刀不误砍柴工:

    d128e3ac0b200e3677d1eac7b05d8d54.png

    d4c37434330fc74259c0d367b0e3ec25.png

    2.贴灯珠上去。你看,是不是一张图就完事儿啦,哈哈哈哈,多么简单。(【转过头去】:我这次实在没有忍住,扯了一回巴子,其实是我贴的时候,太投入,根本停不下来,没时间去拍贴的过程

    ebab14795529ffbe3355ef2e2ab1f147.png

    3.焊漆包线(用尽可能细的漆包线,人站远了看,整个制作就像没有线连着一样,给人感觉简洁):

    f26486bfcbee2ca4a86bdf42e861866c.png

    4.焊各个器件,太阳能板用3m透明双面胶粘,其他的用热熔胶或双面胶粘窗户上:

    21aa47daf791f5fa319085871a7cc1db.png

    5.烧录程序:我使用的是fastled库里的函数,将整个灯带的颜色设置为彩虹色,然后再将其中几个用不着的灯珠设为熄灭。

    最后就完成了:

    b2cf953e84cbfad204838e4b3e28c592.png

    有同事问我,为什么是“hey,merry christmas”。我说,“merry christmas”感觉冷冰冰的,加上一个“hey”之后,是不是就像是在寒冷的冬天,你独自一人走在人烟稀少的路上,突然你的好友不知从哪里冒出来,从后面撞了你一下,然后跟你说“hey,merry christmas”。当你敲了一天代码,累了的时候,一抬头,就看到了窗户上的这句话,是不是会让人感觉到温暖呢。

    展开全文
  • 在上一篇《我是怎样让网站用上HTML5 Manifest》介绍了怎么用Manifest离线网页应用,结果被广大网友吐槽说这东西已经被deprecated,移出web标准了,现在被Service Worker替代了,不管怎么样,Manifest一些...

    在上一篇《我是怎样让网站用上HTML5 Manifest》介绍了怎么用Manifest做一个离线网页应用,结果被广大网友吐槽说这个东西已经被deprecated,移出web标准了,现在被Service Worker替代了,不管怎么样,Manifest的一些思想还是可以借用的。笔者又将网站升级到了Service Worker,如果是用Chrome等浏览器就用Service Worker做离线缓存,如果是Safari浏览器就还是用Manifest,读者可以打开这个网站https://www.rrfed.com感受一下,断网也是能正常打开。

    1. 什么是Service Worker

    Service Worker是谷歌发起的实现PWA(Progressive Web App)的一个关键角色,PWA是为了解决传统Web APP的缺点:

    (1)没有桌面入口

    (2)无法离线使用

    (3)没有Push推送

    那Service Worker的具体表现是怎么样的呢?如下图所示:

    ee8afe4d8d622604e2015d05726f812a.png

    Service Worker是在后台启动的一条服务Worker线程,上图我开了两个标签页,所以显示了两个Client,但是不管开多少个页面都只有一个Worker在负责管理。这个Worker的工作是把一些资源缓存起来,然后拦截页面的请求,先看下缓存库里有没有,如果有的话就从缓存里取,响应200,反之没有的话就走正常的请求。具体来说,Service Worker结合Web App Manifest能完成以下工作(这也是PWA的检测标准):

    11b0701d7576a8c3f58e832201f4de40.png

    包括能够离线使用、断网时返回200、能提示用户把网站添加一个图标到桌面上等。

    2. Service Worker的支持情况

    Service Worker目前只有Chrome/Firfox/Opera支持:

    7de0db77526cbd3f1d473abfebd99f9f.png

    Safari和Edge也在准备支持Service Worker,由于Service Worker是谷歌主导的一项标准,对于生态比较封闭的Safari来说也是迫于形势开始准备支持了,在Safari TP版本,可以看到:

    824d7000db37256732b181b1743f39ce.png

    在实验功能(Experimental Features)里已经有Service Worker的菜单项了,只是即使打开也是不能用,会提示你还没有实现:

    63064ef503d9e6e1716c9a9932ed919a.png

    但不管如何,至少说明Safari已经准备支持Service Worker了。另外还可以看到在今年2017年9月发布的Safari 11.0.1版本已经支持WebRTC了,所以Safari还是一个上进的孩子。

    Edge也准备支持,所以Service Worker的前景十分光明。

    3. 使用Service Worker

    Service Worker的使用套路是先注册一个Worker,然后后台就会启动一条线程,可以在这条线程启动的时候去加载一些资源缓存起来,然后监听fetch事件,在这个事件里拦截页面的请求,先看下缓存里有没有,如果有直接返回,否则正常加载。或者是一开始不缓存,每个资源请求后再拷贝一份缓存起来,然后下一次请求的时候缓存里就有了。

    (1)注册一个Service Worker

    Service Worker对象是在window.navigator里面,如下代码:

    window

    在页面load完之后注册,注册的时候传一个js文件给它,这个js文件就是Service Worker的运行环境,如果不能成功注册的话就会抛异常,如Safari TP虽然有这个对象,但是会抛异常无法使用,就可以在catch里面处理。这里有个问题是为什么需要在load事件启动呢?因为你要额外启动一个线程,启动之后你可能还会让它去加载资源,这些都是需要占用CPU和带宽的,我们应该保证页面能正常加载完,然后再启动我们的后台线程,不能与正常的页面加载产生竞争,这个在低端移动设备意义比较大。

    还有一点需要注意的是Service Worker和Cookie一样是有Path路径的概念的,如果你设定一个cookie假设叫time的path=/page/A,在/page/B这个页面是不能够获取到这个cookie的,如果设置cookie的path为根目录/,则所有页面都能获取到。类似地,如果注册的时候使用的js路径为/page/sw.js,那么这个Service Worker只能管理/page路径下的页面和资源,而不能够处理/api路径下的,所以一般把Service Worker注册到顶级目录,如上面代码的"/sw-3.js",这样这个Service Worker就能接管页面的所有资源了。

    (2)Service Worker安装和激活

    注册完之后,Service Worker就会进行安装,这个时候会触发install事件,在install事件里面可以缓存一些资源,如下sw-3.js:

    const 

    通过上面的操作,创建和添加了一个缓存库叫fed-cache,如下Chrome控制台所示:

    f8561bc84c46b80d9ad7e2ceb0a02a5a.png

    Service Worker的API基本上都是返回Promise对象避免堵塞,所以要用Promise的写法。上面在安装Service Worker的时候就把首页的请求给缓存起来了。在Service Worker的运行环境里面它有一个caches的全局对象,这个是缓存的入口,还有一个常用的clients的全局对象,一个client对应一个标签页。

    在Service Worker里面可以使用fetch等API,它和DOM是隔离的,没有windows/document对象,无法直接操作DOM,无法直接和页面交互,在Service Worker里面无法得知当前页面打开了、当前页面的url是什么,因为一个Service Worker管理当前打开的几个标签页,可以通过clients知道所有页面的url。还有可以通过postMessage的方式和主页面互相传递消息和数据,进而做些控制。

    install完之后,就会触发Service Worker的active事件:

    this

    Service Worker激活之后就能够监听fetch事件了,我们希望每获取一个资源就把它缓存起来,就不用像上一篇提到的Manifest需要先生成一个列表。

    你可能会问,当我刷新页面的时候不是又重新注册安装和激活了一个Service Worker?虽然又调了一次注册,但并不会重新注册,它发现"sw-3.js"这个已经注册了,就不会再注册了,进而不会触发install和active事件,因为当前Service Worker已经是active状态了。当需要更新Service Worker时,如变成"sw-4.js",或者改变sw-3.js的文本内容,就会重新注册,新的Service Worker会先install然后进入waiting状态,等到重启浏览器时,老的Service Worker就会被替换掉,新的Service Worker进入active状态,如果不想等到重新启动浏览器可以像上面一样在install里面调skipWaiting:

    this

    (3)fetch资源后cache起来

    如下代码,监听fetch事件做些处理:

    this

    先调caches.match看一下缓存里面是否有了,如果有直接返回缓存里的response,否则的话正常请求资源并把它放到cache里面。放在缓存里资源的key值是Request对象,在match的时候,需要请求的url和header都一致才是相同的资源,可以设定第二个参数ignoreVary:

    caches

    表示只要请求url相同就认为是同一个资源。

    上面代码的util.fetchPut是这样实现的:

    let 

    需要注意的是跨域的资源不能缓存,response.status会返回0,如果跨域的资源支持CORS,那么可以把request的mod改成cors。如果请求失败了,如404或者是超时之类的,那么也直接返回response让主页面处理,否则的话说明加载成功,把这个response克隆一个放到cache里面,然后再返回response给主页面线程。注意能放缓存里的资源一般只能是GET,通过POST获取的是不能缓存的,所以要做个判断(当然你也可以手动把request对象的method改成get),还有把一些个人不希望缓存的资源也做个判断。

    这样一旦用户打开过一次页面,Service Worker就安装好了,他刷新页面或者打开第二个页面的时候就能够把请求的资源一一做缓存,包括图片、CSS、JS等,只要缓存里有了不管用户在线或者离线都能够正常访问。这样我们自然会有一个问题,这个缓存空间到底有多大?上一篇我们提到Manifest也算是本地存储,PC端的Chrome是5Mb,其实这个说法在新版本的Chrome已经不准确了,在Chrome 61版本可以看到本地存储的空间和使用情况:

    1ce5f3f0819f127ce905926911835c6e.png

    其中Cache Storage是指Service Worker和Manifest占用的空间大小和,上图可以看到总的空间大小是20GB,几乎是unlimited,所以基本上不用担心缓存会不够用。

    (4)cache html

    上面第(3)步把图片、js、css缓存起来了,但是如果把页面html也缓存了,例如把首页缓存了,就会有一个尴尬的问题——Service Worker是在页面注册的,但是现在获取页面的时候是从缓存取的,每次都是一样的,所以就导致无法更新Service Worker,如变成sw-5.js,但是PWA又要求我们能缓存页面html。那怎么办呢?谷歌的开发者文档它只是提到会存在这个问题,但并没有说明怎么解决这个问题。这个的问题的解决就要求我们要有一个机制能知道html更新了,从而把缓存里的html给替换掉。

    Manifest更新缓存的机制是去看Manifest的文本内容有没有发生变化,如果发生变化了,则会去更新缓存,Service Worker也是根据sw.js的文本内容有没有发生变化,我们可以借鉴这个思想,如果请求的是html并从缓存里取出来后,再发个请求获取一个文件看html更新时间是否发生变化,如果发生变化了则说明发生更改了,进而把缓存给删了。所以可以在服务端通过控制这个文件从而去更新客户端的缓存。如下代码:

    this

    通过响应头header的content-type是否为text/html,如果是的话就去发个请求获取一个文件,根据这个文件的内容决定是否需要删除缓存,这个更新的函数util.updateHtmlPage是这么实现的:

    let 

    代码先去获取一个json文件,一个页面会对应一个json文件,这个json的内容是这样的:

    {

    里面主要有一个updateTime的字段,如果本地内存没有这个页面的updateTime的数据或者是和最新updateTime不一样,则重新去获取 html,然后放到缓存里。接着需要通知页面线程数据发生变化了,你刷新下页面吧。这样就不用等用户刷新页面才能生效了。所以当刷新完页面后用postMessage通知页面:

    let 

    并规定type: 1就表示这是一个更新html的消息,然后在页面监听message事件:

    if 

    然后当我们需要更新html的时候就更新json文件,这样用户就能看到最新的页面了。或者是当用户重新启动浏览器的时候会导致Service Worker的运行内存都被清空了,即存储页面更新时间的变量被清空了,这个时候也会重新请求页面。

    需要注意的是,要把这个json文件的http cache时间设置成0,这样浏览器就不会缓存了,如下nginx的配置:

    location 

    因为这个文件是需要实时获取的,不能被缓存,firefox默认会缓存,Chrome不会,加上http缓存时间为0,firefox也不会缓存了。

    还有一种更新是用户更新的,例如用户发表了评论,需要在页面通知service worker把html缓存删了重新获取,这是一个反过来的消息通知:

    if 

    Service Worker也监听message事件:

    const 

    根据不同的消息类型调不同的回调函数,如果是1的话就是删除cache。用户发表完评论后会触发刷新页面,刷新的时候缓存已经被删了就会重新去请求了。

    这样就解决了实时更新的问题。

    4. Http/Manifest/Service Worker三种cache的关系

    要缓存可以使用三种手段,使用Http Cache设置缓存时间,也可以用Manifest的Application Cache,还可以用Service Worker缓存,如果三者都用上了会怎么样呢?

    会以Service Worker为优先,因为Service Worker把请求拦截了,它最先做处理,如果它缓存库里有的话直接返回,没有的话正常请求,就相当于没有Service Worker了,这个时候就到了Manifest层,Manifest缓存里如果有的话就取这个缓存,如果没有的话就相当于没有Manifest了,于是就会从Http缓存里取了,如果Http缓存里也没有就会发请求去获取,服务端根据Http的etag或者Modified Time可能会返回304 Not Modified,否则正常返回200和数据内容。这就是整一个获取的过程。

    所以如果既用了Manifest又用Service Worker的话应该会导致同一个资源存了两次。但是可以让支持Service Worker的浏览器使用Service Worker,而不支持的使用Manifest.

    5. 使用Web App Manifest添加桌面入口

    注意这里说的是另外一个Manifest,这个Manifest是一个json文件,用来放网站icon名称等信息以便在桌面添加一个图标,以及制造一种打开这个网页就像打开App一样的效果。上面一直说的Manifest是被废除的Application Cache的Manifest。

    这个Maifest.json文件可以这么写:

    {
      

    icon需要准备多种规格,最大需要512px * 512px的,这样Chrome会自动去选取合适的图片。如果把display改成standalone,从生成的图标打开就会像打开一个App一样,没有浏览器地址栏那些东西了。start_url指定打开之后的入口链接。

    然后添加一个link标签指向这个manifest文件:

    <

    这样结合Service Worker缓存:

    bdfe5da112f93a2e3c9272b19117ebd1.png

    把start_url指向的页面用Service Worker缓存起来,这样当用户用Chrome浏览器打开这个网页的时候,Chrome就会在底部弹一个提示,询问用户是否把这个网页添加到桌面,如果点“添加”就会生成一个桌面图标,从这个图标点进去就像打开一个App一样。感受如下:

    9868a926fa21d7dcd614e35dead395f4.png

    比较尴尬的是Manifest目前只有Chrome支持,并且只能在安卓系统上使用,IOS的浏览器无法添加一个桌面图标,因为IOS没有开放这种API,但是自家的Safari却又是可以的。

    综上,本文介绍了怎么用Service Worker结合Manifest做一个PWA离线Web APP,主要是用Service Worker控制缓存,由于是写JS,比较灵活,还可以与页面进行通信,另外通过请求页面的更新时间来判断是否需要更新html缓存。Service Worker的兼容性不是特别好,但是前景比较光明,浏览器都在准备支持。现阶段可以结合offline cache的Manifest做离线应用。

    相关阅读:

    1. 为什么要把网站升级到HTTPS
    2. 怎样把网站升级到http/2
    3. 我是怎样让网站用上HTML5 Manifest
    展开全文
  • 下面用纸筒个简单的小蝴蝶,做法很简单。制作过程:准备材料废纸筒、剪刀、胶、水彩笔,纸板。在纸筒上剪下五个圈圈剪完的样子见下图把里面粘贴修整一下,见下图白色纸板把一个小圆捏成下图形状,粘到纸板正中间...
    2b11004054066c5371a034e50dbda953.png

    幼儿园的手工,除了用卡纸做各种简单的小制作外,纸筒也是常用的手工材料。

    下面用纸筒做一个简单的小蝴蝶,做法很简单。

    d37bfcd46e66afa143817e36937a262a.png

    制作过程:

    准备材料

    废纸筒、剪刀、胶、水彩笔,纸板。

    79a8550c1a155f04d744d93b1da7c998.png

    在纸筒上剪下五个圈圈

    0ef893d031bc2f75b8056f1423e8129c.png

    剪完的样子见下图

    82384ec29b2677f4bb4edd8b1953afbf.png

    把里面粘贴修整一下,见下图

    f5d2469ab39ceade849bfd446091496d.png

    白色纸板

    f7918100dabf4dcf6784b80ceb286fbc.png

    把一个小圆捏成下图形状,粘到纸板正中间,见下图

    b13f10707f9e2a18afaddd5b849e74be.png

    图示位置粘上一个小圆圈

    8f64a2db432ed08084b20348d733c99a.png

    再粘上另一个小圆圈,当蝴蝶的两个翅膀,见下图

    49a9ee8fa3a0310876ae0b559803201d.png

    左边用相同的方法把另外两个小圆圈粘好,如下图所示

    10c33f77a2c54c8496ecfb42323e2c20.png

    再从纸筒上剪下两个小纸条,见下图

    3d49d9d0eb2c747c4aa0f35868ac8055.png

    在边缘图示位置涂胶,见下图

    3579c0742892ec8549d7587b45fa06c4.png

    把这两个小纸条分别粘到下图位置,当蝴蝶的触角

    一个小蝴蝶粘好了

    ddb836c413414d562b1c2ccdf44fe1cc.png

    注意在小圈底部涂胶时不太好涂,要小心细致些。

    也可以用水彩笔等颜料涂上颜色,也可以画上些花纹,大家可以随意发挥。

    b7151371229a28025d3d9d6caf2a1137.png

    这个小蝴蝶用的材料简单,做的方法也不难,只要细心些都能做好。

    快找个旧纸筒试试吧,做好了可以当手工作业。

    ——END——

    我喜欢手工,发的图文里都是自己做的小制作,多数是可以当孩子手工作业的简单小手工。

    喜欢就加关注,就能看到以前发的和以后发的了。

    展开全文
  • 大家好,通俗易懂讲营销,我是江湖哥很多剪辑账号自媒体人,经常会遇到一种情况,在网页浏览中正好看到一视频,正好是自己需要或者喜欢,但却不知道如何保存下来。本文就来教你哦,超级简单,几步搞定,傻瓜...
  • 实验要求网站下载程序可以按照要求下载整个网站的网页,其原理是分析每页面中的所有链接,然后根据该链接下载单个文件,并保存下来,采用递归方式进行扫描下载,直到下载页数达到设定好的最大值或者下载层数达到了...
  • 写这个的时候用到了JS中parseInt函数,主要作用可以w3school的的详解http://www.w3school.com.cn/jsref/jsref_parseInt.asp
  • 我们用彩色卡纸冰淇淋,做法非常简单,剪一剪、粘一粘就可以成。制作过程:准备材料彩色卡纸、剪刀、胶、圆规或瓶盖。把黄色正方形卡纸卷成下图形状,并把边缘粘合剪掉多余部分,让上边是平,见下图剪...
  • 利用HTML5和css3制作一个简单的网页 前面我们一起学习了HTML5和css3,我们可以利用这些一个学成在线的网页(前面的知识都在我前几篇博客) 下面附HTML和css源码 <!DOCTYPE html> <html lang="en"> &...
  • 5、 网站中其他页面和功能可以根据自己能力水平进行其他方面设计,功能越多者结课成绩会越高;至少包括如下内容:table布局、表单、列表、超链接和框架结构。 已经帮别人了2份了,这一份实在是不出来,求...
  • [HTML5]简单网页本地音乐播放器

    千次阅读 2015-06-10 09:30:40
    一开始问题主要集中在怎么读取本地文件路径,我想肯定可以用JS实现去操作本地文件(因为node.js很容易实现读取本地文件,但是原生JS怎么写不太清楚),不过简单一点就用这样只能读取一,我想做的是最好是把一...
  • 下载说明: 1.再好作品都不如将来要做的作品。在每一次设计当中都能有所收获,才是设计师在web开发中最得益。 2.本站所有作品均是杨青个人设计。...我在我自己网站上DIV+CSS网站,喜欢DI...
  • HTML5网页设计

    2018-11-29 14:18:55
    一、Sublime编辑器/Python制造 Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,... 只要对相应的代码一些简单的修改,就可以改变同一页面的不同部分,或者页数不同的网页的外观和格式。
  • html5课程结课时的一个简单的关于旅游的前端网页,无后台!功能比较简单易懂,仅供参考,禁止商用!
  • 使用HTML制作一个简单的个人主页

    千次阅读 多人点赞 2020-10-09 23:06:21
    网页我对html有了一个简单,初步认识后制作一个网页,主要目的是练习html的一些简单操作,由于时间关系,有很多做的不好,细节处理不到位地方。 废话不多说,先来看效果 1、首页 这一个网页就是进行了网页...
  • 各位看官大家好,这里是老王设计!交互设计同学可以看过来啦!...前期刚入行,或刚学习小伙伴们不需要太迫切学习一些语言编程~语言篇HTML如果说编程是一种语言,那么HTML5就是所有前端语言里最简单...
  • 如何统计网页访问量功能

    万次阅读 2015-03-27 21:01:15
     HTML5中两种web存储方法:  localStorge-提供没有时间限制web存储,每次访问网页都会被记录存储  sessionStorage-针对一sessionweb存储,只记录当前session访问记录,关闭网页即恢复
  • 大一学 web编程,到大三了全给忘了,这学期开H5这门课听是一头雾水,还是没事时候多看看书,把以前东西找回来。这里呢是第一节课老师留练习,确实不难,只不过全给忘了怎么一下笔记好好记着。 ...
  • 基于Html5的网页大头贴

    千次阅读 2014-01-03 10:23:55
    Html5技术越来越侵蚀着这互联网,不得不承认,Html5所带来改变还是很大,一次偶然机会,找到了Html5调用电脑摄像头API,于是想到了个网页版大头贴来实现拍照与简单修改功能,初期版本还比较简单,...
  • JSP实现简单的网页计算器

    千次阅读 2019-04-17 09:26:47
    尝试运用HTML5以及CSS特效,先别想这么美好。 首先 尽快把基础实现出来然后抓紧时间修正,每天要交 今晚熬夜吧 顺便探讨一下AE 以及web期末作业。 ...
  • 估计很少人知道HTML5 APIS里有一window.postMessage API。window.postMessage功能是允许程序员跨域在两窗口/frames间发送数据信息。基本上,它就像是跨域AJAX,但不是浏览器跟服务器之间交互,而是在两...
  • 5个很常用CSS3网页小实例

    千次阅读 多人点赞 2021-03-09 13:06:04
    这次由于时间有限,就了几相对比较简单的例子。我们一起来看一下。 第一种效果: 由于录制gif图片会掉帧,所以看起来不流畅,很卡,但其实实际效果还是不错的,有弹性一些。 html代码: <span class=...
  • 现在好多人都把HTML5和前端概念弄混淆了。例如,H5是HTML5的简称,而现在好多人把HTML5看成了是前端开发总称。今天达妹就为各位普及一下,到底前端和HTML5有哪些区别?什么是前端开发以一网站为例包括网站设计...
  • html5之动态网页练习

    千次阅读 2018-07-27 19:06:19
    最近两天,利用html5、css、和JS了一个简单的动态网页网页一共分为5个页面,每一个页面都有不同的动画效果,此外还有开机动画及背景音乐。 第一屏:主要是图片的3D无缝轮播效果 第二屏:照片墙,右边每一个图标...
  • 他看女朋友最近经常浏览淘宝、京东、新浪、百度这些网站,于是,就给她简单的页面。女朋友看了之后感觉不太好看,小明同学想将列表的方式转化为表格。过了一段时间,小明同学学到了css,发现css可以美化它写的...
  • 周二(3小时): 前两周一直是为了任务而学习,有些本末倒置了,正确方式应当是先学习,再以...flask是一个网页构建框架,网页的内容还是靠HTML来实现,所以今天 学习内容是:HTML的学习和使用。 这是
  • Html5技术越来越侵蚀着这互联网,不得不承认,Html5所带来改变还是很大,一次偶然机会,找到了Html5调用电脑摄像头API,于是想到了个网页版大头贴来实现拍照与简单修改功能,初期...
  • http://www.jsjtt.com/webkaifa/html5/2013-08-28/34.html http://javascript.ruanyifeng.com/bom/webrtc.html 讲都差不多 也就是怎么使用getUserMedia 下载来栗子也比较简单,可以直接运行 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 596
精华内容 238
关键字:

html5做个简单的网页