整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

移动端原生纯js文字向左无缝滚动特效

手机页面移动端,需求是文字向左无缝滚动marquee特效,用了几个都不行,达不到需求效果,有小bug,最后用了下面的这个原生纯js文字向左无缝滚动marquee特效,我测试了没有问题,可以正常使用它,原生纯js代码少,实用性强,具体看下代码。

1.先看效果演示:

    2.原生纯js代码如下:

    var speed=10; //数字越大文字滚动速度越慢

    var tab=document.getElementById("demo");

    var tab1=document.getElementById("demo1");

    var tab2=document.getElementById("demo2");

    tab2.innerHTML=tab1.innerHTML;

    function Marquee(){

    if(tab2.offsetWidth-tab.scrollLeft<=0)

    tab.scrollLeft-=tab1.offsetWidth

    else{

    tab.scrollLeft++;

    }

    }

    var MyMar=setInterval(Marquee,speed);

    tab.onmouseover=function() {clearInterval(MyMar)};

    tab.onmouseout=function() {MyMar=setInterval(Marquee,speed)};

    var onOff = true;

    var Time = setInterval(Chang,3000);

    function Chang(){

    if(onOff){

    oFig.style.marginLeft='-100%';

    onOff = false;

    }else{

    oFig.style.marginLeft='0';

    onOff = true;

    }

    }

    3.完整版代码地址:

    http://tangjiusheng.com/js/20180526.html

    除注明外的文章,均为来源:汤久生博客,转载请保留本文地址!

    im的使用

    vim基本操作

    移动光标

    下面操作均需处在一般模式(默认的模式)下:

    • h j k l 分别为“左”“下”“上”“右”
    • 翻半页:Ctrl + d(d for down),Ctrl + u(u for up)。
    • 翻一页:Ctrl + f(f for front),Ctrl + b(b for back)。
    • gg表示移到到首行。
    • G表示移动到尾行。
    • nG(n指的是数字)表示移动到第n行;一般用于根据程序错误提示信息进行 bug fix。
    • 0表示移到光标所在行的行首; $表示移动到光标所在行的行尾。

    复制剪切粘贴

    • 按yy复制光标所在行。
    • 按dd剪切光标所在行,如果光剪切不粘贴,那就相当于删除。
    • 按p将复制/剪切的内容粘贴至光标后,因为光标是在具体字符的位置上,所以实际是在该字符的后面;整行的复制粘贴在游标的下一行。

    v模式相关

    • 按v切换到“高亮选择模式”,移动光标进行选择。
    • 在v模式下,按y(y for yank)复制高亮选择的内容。
    • 在v模式下,按d剪切高亮选择的内容,如果光剪切不粘贴,那就相当于删除。

    撤销、重做

    以下仅讨论vim下的操作(vi的操作稍有不同):

    • 按u进行撤销,可多次撤销。
    • 按Ctrl + r(r for redo)进行重做,可多次重做。

    进入编辑模式

    下面所有操作均需在一般模式下执行:

    • i,在当前光标所在字符前插入。
    • o,在当前光标所在行的下一行插入新的一行。
    • O,在当前光标所在行的上一行插入新的一行。

    查找和替换字符串

    下面所有操作均需在一般模式下执行:

    • /word,向下查找一个字符串word,查找后按n看下一匹配结果,按N看上一匹配结果。
    • ?word,向上查找一个字符串word,查找后按n看下一匹配结果,按N看上一匹配结果。
    • :s/word1/word2/g,查找word1并替换为word2,/g表示全文替换,不加则只替换每行的第一个匹配项。
    • :n1,n2s/word1/word2/g,在n1和n2行之间查找word1并替换为word2,其中n1、n2皆可取数字,另外n2可取$表示最后一行。

    行号相关

    • :set nu表示显示行号。
    • :set nonu表示不显示行号。

    保存及退出

    • :w,保存文本。
    • :q,退出vim。
    • :w!,强制保存,在root用户下,即使文本只读也可以完成保存。
    • :q!,强制退出,所有改动不生效。
    • :wq,保存并退出。

    vim插件

    下载Vundle

    $ git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
    

    配置插件

    $ vim ~/.vimrc
    set nocompatible " be iMproved, required
    filetype off " required
    set rtp+=~/.vim/bundle/Vundle.vim
    call vundle#begin()
    Plugin 'VundleVim/Vundle.vim'
    Plugin 'tpope/vim-fugitive'
    Plugin 'git://git.wincent.com/command-t.git'
    Plugin 'file:///home/gmarik/path/to/plugin'
    Plugin 'rstacruz/sparkup', {'rtp': 'vim/'}
    call vundle#end() " required
    filetype plugin indent on " required
    

    安装插件

    复制

    $ vim
    :PluginInstall
    

    或者

    复制

    $ vim +PluginInstall +qall
    

    然后会出现如下图一样的界面


    然后慢慢等!慢慢等!慢慢等!这里敲黑板,画圈圈记起来,笔者当年就是进入这个界面一脸懵逼发现不会动就Ctrl+C了,然后就以为自己配置失败了 o_O。

    仔细看,最左边正在安装的有个>符号,新增的插件有个+符号,左下角的英文也是已经相当明白了!

    一键安装?

    没错,我知道你懒,所以这里提供了一键安装,移步这里一键安装

    • 将我的仓库拉到你的本地
    $ git clone https://github.com/yiranzai/oh-my-zsh.git ~/.oh-my-zsh
    
    • 安装
    $ cd ~/.oh-my-zsh
    $ ./install.sh
     -----------------------------warning-------------------------
    | The installation is successful, please execute |
    | source ~/.zshrc |
     -------------------------------end---------------------------
    

    该脚本会安装vim,配置zshrc/vimrc

    这里贴出我的配置

    作 Parul Pandey

    郭一璞 编译

    量子位 出品 | 公众号 QbitAI

    作为一个超好用的交互式笔记本,Jupyter总是深受开发者的喜爱。

    不过,除了基础的写文档之外,其实Jupyter还有N多功能,简直是一个集视频、图片、PPT、多种交互于一身的万花筒。

    如果不会用,你可能错过了Jupyter 99%的功能。

    Medium上走向数据科学(Towards Data Science)专栏的作者Parul Pandey就总结了七大Jupyter的进阶用法,量子位编译如下~

    执行shell命令

    Shell是一种与计算机进行文本交互的方式。

    一般来讲,当你正在使用Python编译器,需要用到命令行工具的时候,要在shell和IDLE之间进行切换。

    但是,如果你用的是Jupyter,就完全不用这么麻烦了,你可以直接在命令之前放一个“!”,就能执行shell命令,完全不用切换来切换去,就能在IPython里执行任何命令行。

    1In [1]: !ls
    
    2example.jpeg list tmp
    
    3In [2]: !pwd
    
    4/home/Parul/Desktop/Hello World Folder'
    
    5In [3]: !echo "Hello World"
    
    6Hello World
    
    7
    

    我们甚至可以将值传递给shell,像下面这样:

    1In [4]: files= !ls
    
    2In [5]: print(files)
    
    3['example.jpeg', 'list', 'tmp']
    
    4In [6]: directory = !pwd
    
    5In [7]: print(directory)
    
    6['/Users/Parul/Desktop/Hello World Folder']
    
    7In [8]: type(directory)
    
    8IPython.utils.text.SList
    

    注意,返回结果的数据类型不是列表。

    给Jupyter换主题

    使用Jupyter主题,不仅能让你的Jupyter界面更好看、更舒服,还能让屏幕上的代码看起来更显眼。

    比如Chesterish主题:

    solarizedl主题:

    来看一下具体的操作方法:

    第一步,安装:

    1pip install jupyterthemes
    

    第二步,加载可用主题列表:

    1jt -l
    

    第三步,选择你想要的主题:

    1# selecting a particular theme
    
    2jt -t <name of the theme>
    
    3# reverting to original Theme
    
    4jt -r
    

    现在可用的主题有:

    chesterish

    grade3

    gruvboxd

    gruvboxl monokai

    oceans16

    onedork

    solarizedd

    solarizedl

    把名字填进去就好啦。

    不过,每次换主题的时候都要重新加载Jupyter,才能看到主题变化。

    另外我们上面讲的在命令之前加“!”也一样可用。

    笔记本扩展

    笔记本扩展(nbextensions)是一种JavaScript模块,可以加载到笔记本前端页面上,可以大大提升用户体验。

    比如下面这些扩展工具,简直能让效率提升10000倍。

    Hinterland

    Hinterland功能可以让你每敲完一个键,就出现下拉菜单,可以直接选中你需要的词汇。

    Snippets

    Snippets在工具栏里加了一个下拉菜单,可以非常方便的直接插入代码段,完全不用手动敲。

    拆分单元格

    拆分笔记本中的单元格,改成相邻的模式,看起来就像分了两栏。

    目录

    这个功能可以自动找到所有的标题,生成目录。

    并且这个目录还是移动的呦,你可以放在侧边栏,也可以拖动到任何你喜欢的地方悬浮起来。

    折叠一个标题下的全部内容

    如果你的代码太长,觉得滚动过去太麻烦,可以直接折叠掉。

    Autopep8

    一键美化代码,强迫症的福音。

    安装方法

    最后看一下怎么装,需要用到conda:

    1conda install -c conda-forge jupyter_nbextensions_configurator
    

    或者用pip:

    1pip install jupyter_contrib_nbextensions && jupyter contrib nbextension install
    
    2#incase you get permission errors on MacOS,
    
    3pip install jupyter_contrib_nbextensions && jupyter contrib nbextension install --user
    

    然后把Jupyter打开,你就可以看到NBextensions这个选项卡了。

    找不到的话就去菜单的Edit里面找。

    搞定。

    Jupyter小工具

    还有一些Jupyter小工具,比如滑块、文本框之类的部分,可以做一些方便的交互。

    滑块

    1def f(x):
    
    2 return x
    
    3# Generate a slider 
    
    4interact(f, x=10,);
    

    布尔值生成复选框

    1# Booleans generate check-boxes
    
    2interact(f, x=True);
    

    字符串生成文本区域

    1# Strings generate text areas
    
    2interact(f, x='Hi there!');
    

    播放器

     1play = widgets.Play(
    
     2 # interval=10,
    
     3 value=50,
    
     4 min=0,
    
     5 max=100,
    
     6 step=1,
    
     7 description="Press play",
    
     8 disabled=False
    
     9)
    
    10slider = widgets.IntSlider()
    
    11widgets.jslink((play, 'value'), (slider, 'value'))
    
    12widgets.HBox([play, slider])
    

    日历

    1widgets.DatePicker(
    
    2 description='Pick a Date',
    
    3 disabled=False
    
    4)
    

    不过这个部件只能咋Chrome和Edge里用,Firefox和Safari不支持。

    调色盘

    1widgets.ColorPicker(

    2 concise=False,

    3 description='Pick a color',

    4 value='blue',

    5 disabled=False

    6)

    标签

    1tab_contents = ['P0', 'P1', 'P2', 'P3', 'P4']
    
    2children = [widgets.Text(description=name) for name in tab_contents]
    
    3tab = widgets.Tab()
    
    4tab.children = children
    
    5for i in range(len(children)):
    
    6 tab.set_title(i, str(i))
    
    7tab
    

    其他的小部件,可以在文末的传送门跳转到GitHub寻找。

    安装方法

    1# pip
    
    2pip install ipywidgets
    
    3jupyter nbextension enable --py widgetsnbextension
    
    4# Conda
    
    5conda install -c conda-forge ipywidgets
    
    6#Installing ipywidgets with conda automatically enables the extension
    

    使用“interact”功能自动创建UI控件,这是使用IPython最方便的方法。

    1# Start with some imports!
    
    2from ipywidgets import interact
    
    3import ipywidgets as widgets
    

    Qgrid

    Qgrid也是一个Jupyter的小部件,不过它主要用于数据帧,装上之后,就可以像操作Excel里的筛选功能一样,方便的处理数据。

    安装方法

    用pip安装:

    1pip install qgrid
    
    2jupyter nbextension enable --py --sys-prefix qgrid
    
    3# only required if you have not enabled the ipywidgets nbextension yet
    
    4jupyter nbextension enable --py --sys-prefix widgetsnbextension
    

    用conda安装:

    1# only required if you have not added conda-forge to your channels yet
    
    2conda config --add channels conda-forge
    
    3conda install qgrid
    

    放PPT

    人在江湖飘,难免遇到要做PPT的时候。

    但是,如果你的内容都已经放在Jupyter里了,再重新导入PPT,太麻烦了,我们自动转换吧。

    一种方法是用Jupyter内置的PPT选项,依次点击菜单栏里的View → Cell Toolbar → Slideshow,之后每个单元格上面都会有一个灰色的横条,选Sub-Slide

    然后输入以下代码:

    1jupyter nbconvert *.ipynb --to slides --post serve
    
    2# insert your notebook name instead of *.ipynb
    

    好了,现在就变成PPT样式的了,显示在端口8000,你也可以查看源代码找到PPT文件。

    你也可以提前换好主题,比如onedork主题,然后再转换成PPT的的时候就是同一个主题风格的PPT了。

    不过,用PyTorch默认方法生成的PPT代码不能编辑,这个时候就要用到RISE插件了。

    RISE用到reveal.js来运行PPT,可以不退出PPT,直接运行代码。

    先来安装RISE,推荐用conda:

    1conda install -c damianavila82 rise
    

    其实不太推荐pip:

    1pip install RISE
    

    然后调用JS和CSS:

    1jupyter-nbextension install rise --py --sys-prefix
    
    2#enable the nbextension:
    
    3jupyter-nbextension enable rise --py --sys-prefix
    

    安装好啦,现在重新打开你的Jupyter Notebook,发现一个新的扩展,名叫“Enter/Exit RISE Slideshow”。

    戳一下,一个可以边演示边改的PPT就好了。

    嵌入链接和pdf

    扔链接再跳转实在是太麻烦了,不如直接把素材放进Jupyter里面。

    嵌入链接

    1#Note that http urls will not be displayed. Only https are allowed inside the Iframe
    
    2from IPython.display import IFrame
    
    3IFrame('https://en.wikipedia.org/wiki/HTTPS', width=800, height=450)
    

    操作方式如下,当然你需要把链接换成你要放的链接:

    嵌入pdf

    1from IPython.display import IFrame
    
    2IFrame('https://arxiv.org/pdf/1406.2661.pdf', width=800, height=450)
    

    同样,把pdf链接换成你需要用的pdf。

    传送门

    原文:Bringing the best out of Jupyter Notebooks for Data Science

    Parul Pandey, Towards Data Science

    https://towardsdatascience.com/bringing-the-best-out-of-jupyter-notebooks-for-data-science-f0871519ca29

    Jupyter主题

    https://github.com/dunovank/jupyter-themes

    IPython小部件

    https://github.com/jupyter-widgets/ipywidgets

    诚挚招聘

    量子位正在招募编辑/记者,工作地点在北京中关村。期待有才气、有热情的同学加入我们!相关细节,请在量子位公众号(QbitAI)对话界面,回复“招聘”两个字。

    量子位 QbitAI · 头条号签约作者

    վ'ᴗ' ի 追踪AI技术和产品新动态