translate3d方法用来规定指定元素在三维空间中的位移。 用法比较简单,本文将通过一段代码实例动态演示translate3d的效果。 与二维空间位移相比多Z轴的位移,具体参阅CSS3 translate(x,y)一章节。 transform变换更多内容参阅CSS3 2D/3D转换一章节。 语法结构:
1 |
transform:translate3d(x,y,z) |
参数解析: (1).x:表示在x轴方向的位移。 (2).y:表示在y轴方向的位移。 (3).z:表示在z轴方向的位移。 代码实例如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
<!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>蚂蚁部落</title> <style> #box{ position:relative; height:150px; width:150px; margin-left:450px; margin-top:250px; padding:10px; border:1px solid black; perspective:1200px; } #ant{ width:100px; height:100px; text-align:center; line-height:100px; font-size:12px; border:1px solid black; background-color:yellow; transform:translate3d(0px,0px,0px); } table{ font-size:12px; width:500px; margin-left:220px; text-align:left; } .left{ text-align:right; width:150px; } </style> <script type="text/javascript"> function change(x,y,z){ var odiv = document.getElementById("ant"); var oshow = document.getElementById("show"); odiv.style.transform = "translate3d(" + x + "px," + y + "px," + z + "px)"; oshow.innerHTML = x_range.value + "/" + y_range.value + "/" + z_range.value; } window.onload=function(){ var x_range = document.getElementById("x_range"); var y_range = document.getElementById("y_range"); var z_range = document.getElementById("z_range"); x_range.onmousemove = function () { change(x_range.value, y_range.value, z_range.value); } y_range.onmousemove = function () { change(x_range.value, y_range.value, z_range.value); } z_range.onmousemove = function () { change(x_range.value, y_range.value, z_range.value); } } </script> </head> <body> <div id="box"> <div id="ant">蚂蚁部落</div> </div> <table> <tr> <td class="left">x轴位移:</td> <td><input type="range" min="-200" step="1" max="200" id="x_range" value="0"/></td> </tr> <tr> <td class="left">y轴位移:</td> <td><input type="range" min="-200" step="1" max="200" id="y_range" value="0" /></td> </tr> <tr> <td class="left">z轴位移:</td> <td><input type="range" min="-200" step="1" max="200" id="z_range" value="0" /></td> </tr> <tr> <td class="left">x/y/z:</td> <td>(<span id="show">0/0/0</span>)</td> </tr> </table> </body> </html> |
上面的代码结合JavaScript演示了translate3d方法的功能。 特别说明:如果不使用perspective属性,将看不到z轴演示效果,因为3D场景就不会有景深的Z轴。 perspective属性参阅CSS3 perspective一章节。 translate3d方法也可以拆分单独写:
1 2 3 |
transform:translateX(10px); transform:translateY(20px); transform:translateZ(30px); |
from:http://www.softwhy.com/article-8720-1.html
View Detailsvue-router 默认 hash 模式 —— 使用 URL 的 hash 来模拟一个完整的 URL,于是当 URL 改变时,页面不会重新加载。 如果不想要很丑的 hash,我们可以用路由的 history 模式,这种模式充分利用 history.pushState API 来完成 URL 跳转而无须重新加载页面。
1 2 3 4 |
const router = new VueRouter({ mode: 'history', routes: [...] }) |
当你使用 history 模式时,URL 就像正常的 url,例如 http://yoursite.com/user/id,也好看! 不过这种模式要玩好,还需要后台配置支持。因为我们的应用是个单页客户端应用,如果后台没有正确的配置,当用户在浏览器直接访问 http://oursite.com/user/id 就会返回 404,这就不好看了。 所以呢,你要在服务端增加一个覆盖所有情况的候选资源:如果 URL 匹配不到任何静态资源,则应该返回同一个 index.html 页面,这个页面就是你 app 依赖的页面。 #后端配置例子 #Apache
1 2 3 4 5 6 7 8 |
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.html$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.html [L] </IfModule> |
除了 mod_rewrite,你也可以使用 FallbackResource。 #nginx
1 2 3 |
location / { try_files $uri $uri/ /index.html; } |
#原生 Node.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
const http = require('http') const fs = require('fs') const httpPort = 80 http.createServer((req, res) => { fs.readFile('index.htm', 'utf-8', (err, content) => { if (err) { console.log('We cannot open "index.htm" file.') } res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' }) res.end(content) }) }).listen(httpPort, () => { console.log('Server listening on: http://localhost:%s', httpPort) }) |
#基于 Node.js 的 Express 对于 Node.js/Express,请考虑使用 connect-history-api-fallback 中间件。 #Internet Information Services (IIS) 安装 IIS UrlRewrite 在你的网站根目录中创建一个 web.config 文件,内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <rewrite> <rules> <rule name="Handle History Mode and custom 404/500" stopProcessing="true"> <match url="(.*)" /> <conditions logicalGrouping="MatchAll"> <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> </conditions> <action type="Rewrite" url="/" /> </rule> </rules> </rewrite> </system.webServer> </configuration> |
#Caddy
1 2 3 4 |
rewrite { regexp .* to {path} / } |
#Firebase 主机 在你的 firebase.json 中加入:
1 2 3 4 5 6 7 8 9 10 11 |
{ "hosting": { "public": "dist", "rewrites": [ { "source": "**", "destination": "/index.html" } ] } } |
#警告 给个警告,因为这么做以后,你的服务器就不再返回 404 错误页面,因为对于所有路径都会返回 index.html 文件。为了避免这种情况,你应该在 Vue 应用里面覆盖所有的路由情况,然后在给出一个 404 页面。
1 2 3 4 5 6 |
const router = new VueRouter({ mode: 'history', routes: [ { path: '*', component: NotFoundComponent } ] }) |
或者,如果你使用 Node.js 服务器,你可以用服务端路由匹配到来的 URL,并在没有匹配到路由的时候返回 404,以实现回退。更多详情请查阅 Vue 服务端渲染文档。 from:https://router.vuejs.org/zh/guide/essentials/history-mode.html#%E5%90%8E%E7%AB%AF%E9%85%8D%E7%BD%AE%E4%BE%8B%E5%AD%90
View Details光子:最常见的原因是权限的问题,比如你的log目录没有写入权限,有时可能还要给“完全控制”的权限。 ============================================================================ log4net不输出日志文件主要有以下几个原因: 1 没有在AssemblyInfo文件中添加下面的代码:
1 |
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)] |
2 运行程序目录下没有log4net.config配置文件。 解决方法有两种: 手动将log4net.config复制到运行程序 选择解决方案中的log4net.config,在属性–>复制到输出目录,选择始终复制。 3 运行程序目录下没有log4net.dll文件。 解决方案: 手动复制,一般不会出现。 4 log4net的net framework版本与运行程序的版本不一致。 如果在调试中出现以下提示:
1 2 3 4 5 |
引发的异常:“log4net.Appender.FileAppender.LockingStream.LockStateException”(位于 log4net.dll 中) 引发的异常:“System.InvalidOperationException”(位于 System.dll 中) 引发的异常:“System.IO.PathTooLongException”(位于 mscorlib.dll 中) 引发的异常:“System.IO.PathTooLongException”(位于 mscorlib.dll 中) 引发的异常:“log4net.Appender.FileAppender.LockingStream.LockStateException”(位于 log4net.dll 中) |
就很有可能是这个原因。 解决方案: 更改log4net版本或者运行程序的net framework版本。 5 log4net.config的配置文件中有错误。 解决方案: 这个问题最难解决,因为你必须要仔细检查每一个设置点。例如我有一次就无法输出日志,最后发现,file节点配置如下:
1 |
<file value="\\Log\\Common\\"/> |
更改为
1 |
<file value="Log\\Common\\"/> |
期待的日志就出现了。因此,如果前面确定都没有问题的话,你就应该仔细检查一下你的配置文件了。 from:https://blog.csdn.net/sgmcumt/article/details/83021616
View DetailsWSL 子系统是基于 LxssManager 服务运行的。 只需要将 LxssManager 重启即可。 可以做成一个 bat 文件。 net stop LxssManager net start LxssManager from:https://www.cnblogs.com/F4NNIU/p/10015183.html
View Details1、查看我的Ubuntu系统版本 2、客户机win10下载vnc viewer安装: 下载地址:https://download.csdn.net/download/qq_28284093/10387251 点击打开链接 官网:https://www.realvnc.com/en/connect/download/viewer/ 或者直接可以去官网下载 安装后如下: 3、配置被连接的阿里云服务器 (1)先更新下系统软件
1 |
sudo apt-<span class="hljs-keyword">get</span> update |
(2)安装VNC服务
1 |
sudo apt-get install vnc4server |
(3)启动vnc服务
1 |
vncserver |
需要设置密码(密码后面要用到,要记住哦),密码设置完成,服务启动: 这里,可以使用以下两个命令来增加进程和结束进程:
1 |
<span class="hljs-selector-tag">vncserver</span> <span class="hljs-selector-pseudo">:2</span> |
1 |
vncserver -<span class="hljs-keyword">kill</span>: <span class="hljs-number">2</span> |
(4)windows下启动vnc viewer客户端,并输入服务器ip+:进程 例如:120.88.88.120:1(注意是输入英文) 点击继续,会提示输入密码,这个时候就输入在步骤3设置的密码,连接成功,因为没有配置图形化界面,所以不太美观,出现下图所示: (5)配置图形界面,安装gnome桌面
1 |
sudo apt-get <span class="hljs-keyword">install</span> gnome-panel gnome-<span class="hljs-keyword">settings</span>-daemon metacity nautilus gnome-terminal |
(6)修改vnc的启动文件
1 |
vim ~<span class="hljs-regexp">/.vnc/</span>xstartup |
修改里面的内容如下,使用vim编辑器,i进入编辑: #!/bin/sh #Uncomment the following two lines for normal desktop: export XKL_XMODMAP_DISABLE=1 unset SESSION_MANAGER #exec /etc/X11/xinit/xinitrc unset DBUS_SESSION_BUS_ADDRESS gnome-panel & gnome-settings-daemon & metacity & nautilus & gnome-terminal & ESC退出编辑,:wq保存。 (7)安装桌面环境 安装x-window的基础:
1 |
sudo apt-get <span class="hljs-keyword">install</span> x-window-<span class="hljs-keyword">system</span>-core |
安装登陆管理器:
1 |
sudo apt-<span class="hljs-keyword">get</span> install gdm |
安装ubuntu桌面:
1 |
sudo apt-<span class="hljs-keyword">get</span> install ubuntu-desktop |
选择OK 任意选择,点击ok。(我选择第一个,简单介绍一下:gdm是标准桌面,lightdm是轻量桌面),安装过程会持续一段时间。 (8)安装完成之后,杀掉进程,创建进程再次连接: (9)调整分辨率,方便操作
1 2 |
vim /usr/bin/vncserver |
修改下面这一行: 再来看看效果,比刚才好多了 各位大神要是有好的意见或者建议,欢迎留言~~~~~
View Details在绝多数情况下,Linux 不需要使用到GUI的桌面环境,但是有时在一些特殊的场景如安装Oracle的时候,需要有图形界面进行辅助才可以安装。 如果要使用Linux的图形界面,一般有两种方式: 1、Linux系统安装X Windows图形界面,使用vnc远程。 2、Linux系统启用X协议,配置X Clent,本地有桌面环境的机器(如Windows)配置X Server,获取远程的信息,在本地X server上显示图形界面。 方法一: 本机安装图形界面 这里以CentOS6.5的机器为例,安装图形界面比较简单,使用yum即可。
1 2 3 |
yum groupinstall "X Window System" yum groupinstall "Desktop" yum groupinstall "Font" |
然后执行:
1 2 3 |
startx #或者执行 init 5 |
如果要启动时自动加载图形界面,修改/etc/inittab最后一行的默认配置:
1 2 |
vi /etc/inittab id:5:initdefault: # 5 为图形模式,3 为默认字符模式 |
如果是CentOS7 的系统:
1 2 |
yum group list #列出可用的GUI软件包 yum group install "GNOME Desktop" "Graphical Administration Tools" |
修改默认运行模式(7和6不一样):
1 2 3 |
unlink /etc/systemd/system/default.target ln -sf /lib/systemd/system/runlevel5.target /etc/systemd/system/default.target reboot |
配置VNC 安装vnc:
1 |
yum install tigervnc tigervnc-server -y |
修改配置:
1 |
vi /etc/sysconfig/vncservers |
1 2 |
VNCSERVERS="2:root" VNCSERVERARGS[2]="-geometry 800x600 -nolisten tcp -localhost" |
设置vnc密码:
1 |
vncpasswd |
启动vncserver:
1 |
vncserver & |
这样,在本地就可以使用vncview远程连接到Linux图形界面。 方法二: 在Linux服务器上安装图形界面不是一种可取的方法,这样会降低服务器的性能,所以在这里重点介绍一下第二种方法。 X server 的运行原理是这样,远程的X client 做为客户端主动将数据发送到 x server服务器,X server服务器默认起始监听本地的6000端口,会根据不同客户端依次分配。X server将X client 传输的数据在本地进行处理,以图像的方式展现出来,数据传输使用的是X11协议。 这里需要先在本地电脑安装X server,可以使用比较流行的xming也可以使用VcXsrv,这两个都是开源的产品,当然如果有xmanager也能实现相同的功能。 这里我安装的是VcXsrv,使用默认的安装方式即可。 下载链接:https://sourceforge.net/projects/vcxsrv/ 配置好本地设置,默认的-1 改为0 ,然后一路点击默认配置,配置完成后启动VcXsrv server。 修改ssh配置/etc/ssh/sshd_config为:
1 2 3 |
AllowTcpForwarding yes X11Forwarding yes X11UseLocalhost yes |
重启sshd。 配置ssh,这里以xshell为例,如图: 如果有xmanager可以直接选择使用xmanager,由于是使用的VcXsrv,所以选择第二项,填写的IP为安装x server的主机,也就是本地电脑IP. 使用重新连接,配置环境变量(此处为X server的IP,配置要与Xshell统一 ):
1 2 |
export DISPLAY=192.168.20.171:0.0 xhost + |
如果安装的有xhost,执行 xhost + 此步的时候一直卡着没有输出,或者出现“xhost: unable to open display "192.168.20.171:0.0"”,请关闭本地防火墙,并确认本地X server的配置是否正确。 执行测试:
1 2 3 |
# yum install xclock # xclock Warning: Missing charsets in String to FontSet conversion |
[…]
View Details为什么要写这个呢,需要单独 mariadb 客户端时,发现 默认 mariadb 5.x 没有客户端,又不想安装全部的 mariadb server,所以写了么这个一个 通过官网查看 https://mariadb.org/ 或 https://yum.mariadb.org/ 最新版为 10.4.x fox.风 设置数据源 这里使用的是国内源 http://mirrors.aliyun.com/mariadb/yum/10.4/centos7-amd64/
1 2 3 4 5 6 7 8 |
cat <<EOF > /etc/yum.repos.d/mariadb.repo [mariadb] name = MariaDB baseurl = http://mirrors.aliyun.com/mariadb/yum/10.4/centos7-amd64/ gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB enabled=1 gpgcheck=1 EOF |
复制到 终端直接执行 更新缓存
1 2 3 |
yum clean all yum makecache yum repolist |
显示可安装的版本
1 2 3 4 |
#这个可以看版本号 yum search mariadb --showduplicates 或 yum search mariadb |
安装 现在安装的就是 最新的版本了
1 |
yum -y install MariaDB-server MariaDB-client |
命令 设置开机启动
1 |
systemctl enable mariadb |
启动 mariadb
1 |
systemctl start mariadb |
from:https://blog.csdn.net/fenglailea/article/details/92265661
View Details最近初学Linux 对linux的目录产生了很多疑问,看到这篇文章,让我顿时对目录有了一个清晰的认识!推荐给大家! ———————————————————————————————————————————— 使用linux也有一年多时间了 最近也是一直在维护网站系统主机 下面是linux目录结构说明 本人使用的是centos系统,很久没有发表博文了 近期会整理自己所用所了解知识点,发表linux相关的文章,记录自己的linux点点滴滴。 linux 目录结构 /: 根目录,一般根目录下只存放目录,不要存放文件,/etc、/bin、/dev、/lib、/sbin应该和根目录放置在一个分区中 /bin:/usr/bin: 可执行二进制文件的目录,如常用的命令ls、tar、mv、cat等。 /boot: 放置linux系统启动时用到的一些文件。/boot/vmlinuz为linux的内核文件,以及/boot/grub。建议单独分区,分区大小100M即可 /dev: 存放linux系统下的设备文件,访问该目录下某个文件,相当于访问某个设备,常用的是挂载光驱mount /dev/cdrom /mnt。 /etc: 系统配置文件存放的目录,不建议在此目录下存放可执行文件,重要的配置文件有/etc/inittab、/etc/fstab、/etc/init.d、/etc/X11、/etc/sysconfig、/etc/xinetd.d修改配置文件之前记得备份。注:/etc/X11存放与x windows有关的设置。 /home: 系统默认的用户家目录,新增用户账号时,用户的家目录都存放在此目录下,~表示当前用户的家目录,~test表示用户test的家目录。建议单独分区,并设置较大的磁盘空间,方便用户存放数据 /lib:/usr/lib:/usr/local/lib: 系统使用的函数库的目录,程序在执行过程中,需要调用一些额外的参数时需要函数库的协助,比较重要的目录为/lib/modules。 /lost+fount: 系统异常产生错误时,会将一些遗失的片段放置于此目录下,通常这个目录会自动出现在装置目录下。如加载硬盘于/disk 中,此目录下就会自动产生目录/disk/lost+found /mnt:/media: 光盘默认挂载点,通常光盘挂载于/mnt/cdrom下,也不一定,可以选择任意位置进行挂载。 /opt: 给主机额外安装软件所摆放的目录。如:FC4使用的Fedora 社群开发软件,如果想要自行安装新的KDE 桌面软件,可以将该软件安装在该目录下。以前的 Linux 系统中,习惯放置在 /usr/local 目录下 /proc: 此目录的数据都在内存中,如系统核心,外部设备,网络状态,由于数据都存放于内存中,所以不占用磁盘空间,比较重要的目录有/proc/cpuinfo、/proc/interrupts、/proc/dma、/proc/ioports、/proc/net/*等 /root: 系统管理员root的家目录,系统第一个启动的分区为/,所以最好将/root和/放置在一个分区下。 /sbin:/usr/sbin:/usr/local/sbin: 放置系统管理员使用的可执行命令,如fdisk、shutdown、mount等。与/bin不同的是,这几个目录是给系统管理员root使用的命令,一般用户只能"查看"而不能设置和使用。 /tmp: 一般用户或正在执行的程序临时存放文件的目录,任何人都可以访问,重要数据不可放置在此目录下 /srv: 服务启动之后需要访问的数据目录,如www服务需要访问的网页数据存放在/srv/www内 /usr: 应用程序存放目录,/usr/bin 存放应用程序, /usr/share 存放共享数据,/usr/lib 存放不能直接运行的,却是许多程序运行所必需的一些函数库文件。/usr/local:存放软件升级包。/usr/share/doc: 系统说明文件存放目录。/usr/share/man: 程序说明文件存放目录,使用 man ls时会查询/usr/share/man/man1/ls.1.gz的内容建议单独分区,设置较大的磁盘空间 /var: 放置系统执行过程中经常变化的文件,如随时更改的日志文件 /var/log,/var/log/message: 所有的登录文件存放目录,/var/spool/mail: 邮件存放的目录,/var/run: 程序或服务启动 后,其PID存放在该目录下。建议单独分区,设置较大的磁盘空间 ------------------------------------------ /dev: 目录 dev是设备(device)的英文缩写。/dev这个目录对所有的用户都十分重要。因为在这个目录中包含了所有Linux系统中使用的外部设备。但是这里并不是放的外部设备的驱动程序,这一点和 windows,dos操作系统不一样。它实际上是一个访问这些外部设备的端口。我们可以非常方便地去访问这些外部设备,和访问一个文件,一个目录没有任何区别。 Linux沿袭Unix的风格,将所有设备认成是一个文件。 设备文件分为两种:块设备文件(b)和字符设备文件(c) 设备文件一般存放在/dev目录下,对常见设备文件作如下说明: /dev/hd[a-t]:IDE设备 /dev/sd[a-z]:SCSI设备 /dev/fd[0-7]:标准软驱 /dev/md[0-31]:软raid设备 /dev/loop[0-7]:本地回环设备 /dev/ram[0-15]:内存 /dev/null:无限数据接收设备,相当于黑洞 /dev/zero:无限零资源 /dev/tty[0-63]:虚拟终端 /dev/ttyS[0-3]:串口 /dev/lp[0-3]:并口 /dev/console:控制台 /dev/fb[0-31]:framebuffer /dev/cdrom => /dev/hdc /dev/modem => /dev/ttyS[0-9] /dev/pilot => /dev/ttyS[0-9] /dev/random:随机数设备 /dev/urandom:随机数设备 (PS:随机数设备,后面我会再写篇博客总结一下) /dev目录下的节点是怎么创建的? devf或者udev会自动帮你创建得。 kobject是sysfs文件系统的基础,udev通过监测、检测sysfs来获取新创建的设备的。 ------------------------------------------ /etc: 目录 包含很多文件.许多网络配置文件也在/etc 中. /etc/rc or /etc/rc.d or /etc/rc*.d 启动、或改变运行级时运行的scripts或scripts的目录. /etc/passwd […]
View Details最近迷上将夜,就用主角做栗子了。 转换后: SQL代码
1 2 3 4 5 |
select substring_index(substring_index(a.userIds,',',b.help_topic_id+1),',',-1) id, substring_index(substring_index(a.userNames,',',b.help_topic_id+1),',',-1) username from jiangye_actor a join mysql.help_topic b on b.help_topic_id < (length(a.userNames) - length(replace(a.userNames,',',''))+1) |
substring_index函数的用法可以参考这篇博客 https://www.cnblogs.com/mqxs/p/7380933.html 来来来,解释一波 1. on条件后面(length(a.userNames) – length(replace(a.userNames,’,’,’’))+1)这个语法,是得到被逗号分隔的字段一共有几个, 为什么后面还有一个加1? 3+1=4;可以这样理解,一根绳子剪三刀可以分成四段,同理一个主演名字串,三个逗号可以分隔出四个主演的名字。 既然是将一个字段按照逗号分隔转成多行,那么现在已经确定了行数。 2. substring_index(substring_index(a.userNames,’,’,b.help_topic_id+1),’,’,-1)的理解如下图: 提示: mysql.help_topic这张表我们只用到了它的help_topic_id,可以看到这个help_topic_id是从0开始一直连续的,join这张表只是为了确定数据行数。现在假设我的mysql.help_topic一共只有5条数据,那么最多可转成5行数据,若果现在主演的名字有6个就不能用mysql.help_topic这张表了。 由此看出我们完全可以找其他表来替代mysql.help_topic,只要满足表的id是连续的,且数据条数超过了你要转换的行数即可。 from:https://blog.csdn.net/XDSXHDYY/article/details/84589486
View Details