Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
示:
typed.js是一個(gè)類型化庫,效果是用打字機(jī)的方式顯示一段話,可以自定義任何字符串、指定顯示速度、指定是否循環(huán)等
可以在此網(wǎng)站查看所有演示的Demo:
其實(shí)可以使用原生JS來實(shí)現(xiàn)這個(gè)效果,但是還是很麻煩的 typed.js是一個(gè)輕量級的JavaScript插件, 用于實(shí)現(xiàn)頁面文字的打字動(dòng)畫效果 這是一款輕量級,使用簡單,功能強(qiáng)大的插件
主要特點(diǎn):
使用包管理器進(jìn)行安裝
# With NPM
npm install typed.js
# With Yarn
yarn add typed.js
使用cdn鏈接
<script src="https://cdn.jsdelivr.net/npm/typed.js@2.0.11"></script>
<span id="typed" style="white-space: pre-wrap;line-height: 30px;"></span>
經(jīng)過測試,文字放在span標(biāo)簽里面,輸入的光標(biāo)才會(huì)正常顯示。
const options = {
strings: [
'First test.',
'Second test, \nit will pause for three seconds. ^3000',
"Second test, \nthe last sentence will go back to 'Second test, ', \noh no, this is the third test. ^1000",
"It's going to start repeating.",
],
typeSpeed: 50, // 打印速度
startDelay: 300, // 開始之前的延遲300毫秒
loop: true, // 是否循環(huán)
};
const typed = new Typed('#typed', options);
輸入暫停
var typed = new Typed(".element", {
// 鍵入“first”后等待1000毫秒
strings: ["First ^1000 sentence.", "Second sentence."]
});
智能退格
在下面的示例中,這只會(huì)在“This is a”之后退格。
// 只退格與前一個(gè)字符串不匹配的內(nèi)容
var typed = new Typed(".element", {
strings: ["This is a JavaScript library", "This is an ES6 module"],
smartBackspace: true // Default value
});
var typed = new Typed(".element", {
/**
* @property {array} strings 要鍵入的字符串
* @property {string} stringsElement 包含字符串子元素的元素的ID
*/
strings: ['These are the default values...', 'You know what you should do?', 'Use your own!', 'Have a great day!'],
stringsElement: null,
/**
* @property {number} typeSpeed 輸入速度,以毫秒為單位
*/
typeSpeed: 0,
/**
* @property {number} startDelay 鍵入之前的時(shí)間以毫秒開始
*/
startDelay: 0,
/**
* @property {number} backSpeed 退格速度,以毫秒為單位
*/
backSpeed: 0,
/**
* @property {boolean} smartBackspace 是否只退格與前一個(gè)字符串不匹配的內(nèi)容
*/
smartBackspace: true,
/**
* @property {boolean} shuffle 是否洗牌
*/
shuffle: false,
/**
* @property {number} backDelay 退回之前的時(shí)間,以毫秒為單位
*/
backDelay: 700,
/**
* @property {boolean} fadeOut 是否用淡出替代空格
* @property {string} fadeOutClass 用于淡入淡出動(dòng)畫的css類
* @property {boolean} fadeOutDelay 以毫秒為單位淡出延遲
*/
fadeOut: false,
fadeOutClass: 'typed-fade-out',
fadeOutDelay: 500,
/**
* @property {boolean} loop 是否循環(huán)字符串
* @property {number} loopCount 循環(huán)次數(shù)
*/
loop: false,
loopCount: Infinity,
/**
* @property {boolean} showCursor 是否顯示光標(biāo)
* @property {string} cursorChar 光標(biāo)的字符
* @property {boolean} autoInsertCss 是否將光標(biāo)和fadeOut的CSS插入HTML <head>
*/
showCursor: true,
cursorChar: '|',
autoInsertCss: true,
/**
* @property {string} attr 輸入屬性
* 例如:輸入占位符,值或僅HTML文本
*/
attr: null,
/**
* @property {boolean} bindInputFocusEvents 如果el是文本輸入,則綁定到焦點(diǎn)和模糊
*/
bindInputFocusEvents: false,
?
/**
* @property {string} contentType 明文的'html'或'null'
*/
contentType: 'html',
/**
* 所有打字都已完成調(diào)用的回調(diào)函數(shù)
* @param {Typed} self
*/
onComplete: (self) => {},
/**
* 在鍵入每個(gè)字符串之前調(diào)用的回調(diào)函數(shù)
* @param {number} arrayPos
* @param {Typed} self
*/
preStringTyped: (arrayPos, self) => {},
/**
* 輸入每個(gè)字符串后調(diào)用的回調(diào)函數(shù)
* @param {number} arrayPos
* @param {Typed} self
*/
onStringTyped: (arrayPos, self) => {},
/**
* 在循環(huán)期間,在鍵入最后一個(gè)字符串之后調(diào)用的回調(diào)函數(shù)
* @param {Typed} self
*/
onLastStringBackspaced: (self) => {},
/**
* 打字已經(jīng)停止調(diào)用的回調(diào)函數(shù)
* @param {number} arrayPos
* @param {Typed} self
*/
onTypingPaused: (arrayPos, self) => {},
/**
* 停止后開始鍵入調(diào)用的回調(diào)函數(shù)
* @param {number} arrayPos
* @param {Typed} self
*/
onTypingResumed: (arrayPos, self) => {},
/**
* 重置后調(diào)用的回調(diào)函數(shù)
* @param {Typed} self
*/
onReset: (self) => {},
/**
* 停止后調(diào)用的回調(diào)函數(shù)
* @param {number} arrayPos
* @param {Typed} self
*/
onStop: (arrayPos, self) => {},
/**
* 開始后調(diào)用的回調(diào)函數(shù)
* @param {number} arrayPos
* @param {Typed} self
*/
onStart: (arrayPos, self) => {},
/**
* 銷毀后調(diào)用的回調(diào)函數(shù)
* @param {Typed} self
*/
onDestroy: (self) => {}
});
html
<span id="typed"></span>
css
* {
padding: 0;
margin: 0;
box-sizing: border-box;
}
body {
width: 100vw;
height: 100vh;
background: rgb(34, 193, 195);
display: flex;
justify-content: center;
align-items: center;
}
span {
font-size: 32px;
font-weight: 600;
white-space: pre-wrap; /* 保持空白和換行符,并自動(dòng)換行 */
}
js
var typed = new Typed("#typed", {
strings: ['我喜歡<span style="color:yellow">睡覺</span>', '我喜歡吃飯', '<span style="color:red">我喜歡自由</span>'],
typeSpeed: 100,//打字的速度
smartBackspace: true, // 開啟智能退格 默認(rèn)false
backSpeed: 50,//后退速度
backDelay: 500,//后退延遲
loop: true,//是否循環(huán).,,
startDelay: 1000,//起始時(shí)間
fadeOut: true,//淡出效果
fadeOutClass: 'typed-fade-out',//fadeOutClass 用于淡入淡出動(dòng)畫的css類
fadeOutDelay: 500,//以毫秒為單位淡出延遲
smartBackspace: true, //智能后間距,
});
實(shí)現(xiàn)效果 就和文章一開始展現(xiàn)的碼上掘金那個(gè)效果一樣.
關(guān)于TypedJs庫 , 還有更多新的玩法, 大家可以根據(jù)上面提供的配置項(xiàng).自己寫寫Demo 玩玩.
作者:心安事隨
鏈接:https://juejin.cn/post/7349752708385374262
般我們常見placeholder偽類選擇器用來修改默認(rèn)樣式及文案,忽然發(fā)現(xiàn)placeholder-shown偽類選擇器,比較官方的解釋是
CSS偽類表示任何顯示占位符文本的form元素。
簡單來說就是當(dāng)輸入框的placeholder內(nèi)容顯示的時(shí)候,輸入框干嘛干嘛。
兼容性如下,在移動(dòng)端沒什么問題
:placeholder-shown CSS 偽類 在 <input> 或 <textarea> 元素顯示 placeholder text 時(shí)生效,簡單的說就是 placeholder 有值才生效,如下所示:
// html
<input placeholder="placeholder text" />
<textarea placeholder="placeholder text"></textarea>
// css
input:placeholder-shown, textarea:placeholder-shown{
border:1px solid pink;
}
如果 placeholder 為空 placeholder-show 就沒效果了:
// html
<input placeholder="" />
<textarea placeholder=" text"></textarea>
我們可以使用:placeholder-shown設(shè)置input元素的樣式。
input:placeholder-shown {
border: 1px solid pink;
background: yellow;
color: green;
}
注意一些奇怪的問題-我們設(shè)置 color: green,但沒有作用用。這是因?yàn)?placeholder-shown僅會(huì)針對input本身。對于實(shí)際的占位符文本,必須使用偽元素::placeholder。
input::placeholder {
color: green;
}
?? 我注意到有一些其他的屬性,如果應(yīng)用::placeholder-shown,也會(huì)影響placeholder的樣式。
input:placeholder-shown, textarea:placeholder-shown{
font-style: italic;
text-transform: uppercase;
letter-spacing: 5px;
}
我也不知道這是啥情況,也許是因?yàn)檫@些屬性被placeholder繼承了,如果你知道原因,歡迎留言告訴我一下,謝謝。
:placeholder-shown是專門用于確定元素是否顯示占位符的對象,我們主要使用它來檢查input 內(nèi)容是否為空(假設(shè)所有的input都有一個(gè)占位符)。這里你可能會(huì)想,使用 empty 也是可以的吧?我們來看看。
// html
<input value="not empty">
<input><!-- empty -->
// css
input:empty {
border: 1px solid pink;
}
input {
border: 1px solid black;
}
這里看似empty起作用了,因?yàn)槲覀兛吹降氖欠奂t色邊框,但這實(shí)際上不起作用
之所以顯示粉紅色,是因?yàn)閭晤愒黾恿?css 的權(quán)重。類似于類選擇器(即.form-input)比類型選擇器(即input)具有更高的權(quán)重。高權(quán)限選擇器將始終覆蓋低權(quán)重設(shè)置的樣式。
所以我們可以這樣說:不要使用:empty檢查輸入元素是否為空。
我們檢查輸入是否為空的唯一方法是使用:placeholder-shown。但是如果我們的輸入元素沒有占位符會(huì)發(fā)生什么呢? 這里有個(gè)取巧的方法:傳入一個(gè)空字符串" "。
// html
<input placeholder=" "><!-- pass empty string -->
//css
input:placeholder-shown {
border-color: pink;
}
我們可以使用:not偽類對某些事物進(jìn)行逆運(yùn)算。在這里,我們可以在輸入不是空的情況下進(jìn)行定位。
//html
<input placeholder="placeholder" value="not empty" />
// css
input:not(:placeholder-shown) {
border: 1px solid green;
}
用placeholder-shown我們可以實(shí)現(xiàn)下面動(dòng)效
具體代碼如下:
Html
<div class="input">
<input class="input-fill" placeholder="郵箱">
<label class="input-label">郵箱</label>
</div>
Css
.input{
position: relative;
}
.input-fill{
border: 1px solid #ececec;
outline: none;
padding: 13px 16px 13px;
font-size: 16px;
line-height: 1.5;
width: fit-content;
border-radius: 5px;
}
.input-fill:placeholder-shown::placeholder {
color: transparent;
}
.input-label {
position: absolute;
font-size: 16px;
line-height: 1.5;
left: 16px; top: 14px;
color: #a2a9b6;
padding: 0 2px;
transform-origin: 0 0;
pointer-events: none;
transition: all .25s;
}
.input-fill:focus{
border: 1px solid #2486ff;
}
.input-fill:not(:placeholder-shown) ~ .input-label,
.input-fill:focus ~ .input-label {
transform: scale(0.75) translate(0, -32px);
background-color: #fff;
color: #2486ff;
}
作者:Samantha Ming 譯者:前端小智 來源:medium 原文:https://www.samanthaming.com/tidbits/88-css-placeholder-shown/
i,你好呀,我是May。
今天繼續(xù)跟大家分享游戲本地化常見的源文檔,PO文件~
(其實(shí)之前寫過一篇簡單的,這次更新為新內(nèi)容~)
在進(jìn)行游戲和應(yīng)用程序本地化時(shí),我們最常見的文檔是多語言Excel文檔,詳見。
此外,還有一種常見的語言包文檔,就是PO文件。
比如我在電腦一搜,就找到很多語言包的PO文檔,如剪映云的PO文件。
所以今天分享:如何翻譯多語言的PO文檔。
PO是portable object (可跨平臺對象)的縮寫,可以被Java程序、GNU gettext或其他軟件程序作為屬性文件引用,是應(yīng)用程序本地化時(shí)常見的文檔。
我的觀點(diǎn)還是:我們本地化人員不是程序員,不需要會(huì)寫,只要認(rèn)識就行!
我們來以一個(gè)demo文檔認(rèn)識一下,什么是PO文檔:
這里的例子我就用我下載好的剪映云自帶的PO文檔做案例了,如有侵權(quán),聯(lián)系修改~
PO文件的數(shù)據(jù)結(jié)構(gòu)長這樣。其中:
# 井號后面一般是注釋;
msgid ""——msgid空格引號,引號內(nèi)是原文;
msgstr ""——msgstr空格引號,引號內(nèi)是原文翻譯結(jié)束后的譯文的內(nèi)容。
根據(jù)編程語言不同,原文可能會(huì)含有HTML樣式或其它占位符,翻譯時(shí)必須保留這些字符串。
既然是注釋,也注釋的類型怎么區(qū)分呢?在PO中,具體的注釋類型由緊隨井號的字符決定,比如:
#—— 井號后面緊跟空格,是譯員的注釋;
#.——井號后面緊跟緊跟句點(diǎn),是額外注釋,一般是從源代碼注釋生成;
#:—— 井號后面緊跟冒號,表明待翻譯語句的出處,一般標(biāo)記源代碼文件及行數(shù);
#,—— 井號后面緊跟逗號,一般是由編譯器生成的格式注釋。
有時(shí),同一個(gè)句子在不同的場景里要翻譯成不同的意思。所以為了區(qū)分上下文的場景,在PO文件中也會(huì)通過 msgctxt 字段,來明確句子在程序中的具體位置和含義。
對于有單復(fù)數(shù)的語言而言,PO支持設(shè)置單復(fù)數(shù)區(qū)分。
CCJK(簡中繁中日韓)是沒有單復(fù)數(shù)的,就不行~
那,這樣的文件如何翻譯呢?
memoQ支持直接導(dǎo)入PO文件。
對于含有占位符或HTML樣式的文檔,還可以借助層疊過濾器實(shí)現(xiàn)。
層疊層疊嘛,第一層是PO gettext(也就是PO)過濾器,第二層是HTML過濾器,也可以再加一層正則表達(dá)式標(biāo)注器。
直接將文件導(dǎo)入至項(xiàng)目即可。
如果原文中有想<color=yellow>和{PropName}或者 \n 這樣的字符串和非譯元素,需要再加一層正則表達(dá)式標(biāo)注器,并設(shè)置正則定義方式。
——這樣的話原文中的非譯元素可以固定為標(biāo)簽,譯員就不會(huì)誤翻譯。
Step 1:在導(dǎo)入項(xiàng)目時(shí),使用“選擇性導(dǎo)入”;
Step 2:選擇好原文后,默認(rèn)用的過濾器是PO gettext過濾器。因?yàn)樵挠凶址@里選擇“更改過濾器和配置”;
Step 3:添加一層正則表達(dá)式標(biāo)注器,并設(shè)置正則定義方式;
Step 4:設(shè)置完成過濾器,保存層疊過濾器,以供下次使用。然后,點(diǎn)擊“確定”即可。
我寫過一篇應(yīng)用程序本地化中常用字符串和正則表達(dá)式推薦,你可以來學(xué)習(xí)正則。
當(dāng)然,memoQ自帶了一個(gè)tags and entities的標(biāo)注器,內(nèi)嵌了像 <color>這樣的標(biāo)簽,也設(shè)置了哪些是開標(biāo)簽?zāi)男┦顷P(guān)閉標(biāo)簽,你也可以直接使用,還是不錯(cuò)的。
導(dǎo)入完成文檔后,即可在memoQ中進(jìn)行翻譯了。
在翻譯過程中,你會(huì)發(fā)現(xiàn):
msgid中的原文就提取出來了,可以安心做翻譯;
下方還可以預(yù)覽原文和譯文。
翻譯結(jié)束后,導(dǎo)出就OK啦。
導(dǎo)出譯文的操作可以參考。
這里用了機(jī)器翻譯的結(jié)果。
好啦,希望你上內(nèi)容可以幫到你,有用可收藏~
特別說明:本文僅用于學(xué)術(shù)交流,如有侵權(quán)請后臺聯(lián)系小編刪除。
- END -
轉(zhuǎn)載來源:職業(yè)譯員玩轉(zhuǎn)翻譯技術(shù)
轉(zhuǎn)載編輯:李倩楠
*請認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。