◆少前百科是非盈利性、非官方的少女前线维基百科。
◆如果您发现某些内容错误/空缺,请勇于修正/添加!参与进来其实很容易!点这里 加入少前百科
◆有任何意见、建议、纠错,欢迎在 GFwiki:反馈与建议 提出和讨论。编辑事务讨论QQ群:597764980,微博@GFwiki少前百科
◆To foreigners,You can use twitter to contact us.
Icon Nyto Silver.png

“Widget:NewCharPreview”的版本间的差异

来自少前百科GFwiki
跳转至: 导航搜索
 
(未显示同一用户的27个中间版本)
第1行: 第1行:
 
<includeonly>
 
<includeonly>
 
<style type="text/css">
 
<style type="text/css">
#pbutton {
+
.detail {
  width: 9em;
+
    font-style: italic;
  height: 2.5em;
+
    width: 100%;
  border: none;
 
  color: white;
 
  border-radius: 4px;
 
  background-color: transparent;
 
 
}
 
}
  
#pmore {
+
.preview-attr-ranks {
  width: 100%;
+
    max-width: 420px;
  font-style: italic;
+
    text-align: center;
 +
    width: 100%;
 
}
 
}
  
#plist {
+
.preview-detail-notice { font-style: italic; }
  margin-left: 0;
+
 
  margin-right: 0;
+
.preview-name { font-weight: bold; }
  list-style: none;
+
 
 +
.preview-quote::after { content: "”"; }
 +
 
 +
.preview-quote::before { content: "“"; }
 +
 
 +
#preview-list {
 +
    flex-wrap: wrap;
 +
    list-style: none;
 +
    margin: 0;
 +
    z-index: 1;
 
}
 
}
  
#plist li {
+
#preview-list li:active,
  width: 10em;
+
#preview-menu:active { background: #fff5; }
  height: 2.5em;
+
 
  line-height: 2.5em;
+
#preview-menu:hover, #preview-menu:focus,
  background-clip: border-box;
+
#preview-list li:hover, #preview-list li:focus {
  border-bottom: 2px transparent solid;
+
    background: #fff3;
 +
    cursor: pointer;
 
}
 
}
  
#plist li:hover, #plist li:focus, #pbutton:hover, #pbutton:focus {
+
#preview-menu {
  cursor: pointer;
+
    background: #fff3;
  background-color: rgba(255, 255, 255, 0.2);
+
    border-radius: 4px 4px 0 0;
 +
    height: 48px;
 +
    width: calc(8em + 56px);
 
}
 
}
  
#plist li:active, #pbutton:active {
+
#preview-menu div:first-child {
  background-color: rgba(255, 255, 255, 0.33);
+
    padding: 13px 0 4px 16px;
 +
    width: 8em;
 
}
 
}
  
#pcontent {
+
#preview-menu div:last-child {
  display: -webkit-flex;
+
    padding: 12px 8px;
  display: flex;
 
  -webkit-flex-wrap: wrap;
 
  flex-wrap: wrap;
 
 
}
 
}
  
#pimg {
+
#preview-pager { overflow: hidden; }
  -webkit-flex: 360px 1;
+
 
  flex: 360px 1;
+
#previews {
  width: 100%;
+
    display: flex;
  max-width: 512px;
+
    left: 0;
  height: 100%;
+
    position: relative;
 +
    transition: left 0.3s ease;
 +
<!--{assign var=name_count value=$name|@count}-->
 +
    width: <!--{$name_count*100}-->%;
 +
    z-index: 0;
 
}
 
}
  
#pcontent div {
+
#previews > div {
  -webkit-flex: 12em 1;
+
    display: flex;
  flex: 12em 1;
+
    flex: 1;
 +
    flex-wrap: wrap;
 
}
 
}
  
#pquote:before {
+
#previews > div > div { flex: 12em 1; }
  content: "“";
 
}
 
  
#pquote:after {
+
#previews > div > p { width: 100%; }
  content: "”";
 
}
 
  
#pgrades {
+
#previews img {
 +
  flex: 360px 1;
 
   width: 100%;
 
   width: 100%;
  text-align: center;
+
   max-width: 512px;
   max-width: 420px;
 
}
 
 
 
p.pname {
 
  font-weight: bold;
 
 
}
 
}
  
#pbutton:hover {
+
#tab-indicator {
  cursor: pointer;
+
    background: #f4c430;
 +
    height: 2px;
 +
    left: 0;
 +
    position: relative;
 +
    top: -2px;
 +
    transition: left 0.3s ease;
 +
    width: 10em;
 
}
 
}
 
</style>
 
</style>
<button type="button" onclick="toggleMenu()" id="pbutton"></button>
+
<div id="preview-menu">
<ul id="plist">
+
  <div><!--{$name[0]}--></div>
  <!--{foreach $name as $n}-->
 
    <li tabindex="0"><!--{$n}--></li>
 
  <!--{/foreach}-->
 
</ul>
 
<div id="pcontent">
 
  <p id="pmore">更多信息请见:<a href="" class="pname"></a></p>
 
  <img src="" alt="" id="pimg">
 
 
   <div>
 
   <div>
     <p class="pname"></p>
+
     <svg xmlns="http://www.w3.org/2000/svg"
    <blockquote id="pquote"></blockquote>
+
         id="arrow-drop" height="24px" width="24px" viewBox="0 0 24 24">
    <p>武器类型:<span id="ptype"></span></p>
+
      <path d="M 7,10 l 5,5 5,-5 H 7 z" fill="white" />
 
+
     </svg>
    <table id="pgrades" class="stattable">
 
      <caption>属性评级</caption>
 
    <tbody>
 
         <tr>
 
          <th>伤害</th><th>命中</th><th>回避</th><th>射速</th><th>生命</th><th>成长</th><th>护甲</th>
 
        </tr>
 
        <tr>
 
          <td id="ppow"></td><td id="phit"></td><td id="pdodge"></td><td id="prate"></td><td id="php"></td><td id="pgrowth"></td><td id="parmor"></td>
 
        </tr>
 
     </tbody>
 
    </table>
 
 
 
    <p>获得方式:<span id="pgain"></span></p>
 
 
   </div>
 
   </div>
 +
</div>
 +
<ul id="preview-list">
 +
<!--{foreach $name as $n}-->
 +
<li tabindex="0"><!--{$n}--></li>
 +
<!--{/foreach}-->
 +
</ul>
 +
<div id="tab-indicator"></div>
 +
<div id="preview-pager">
 +
<div id="previews">
 +
<!--{foreach $name as $n}-->
 +
<div>
 +
<p class="preview-detail-notice">更多信息请见:<a href="/w/<!--{$n}-->"><!--{$n}--></a></p>
 +
<img src="<!--{$pic[$n@index]}-->" alt="<!--{$n}-->的立绘">
 +
<div>
 +
<p class="preview-name"><!--{$n}--></p>
 +
<blockquote class="preview-quote"><!--{$quote[$n@index]}--></blockquote>
 +
<p>武器类型:<!--{$type[$n@index]}--></p>
 +
<table class="stattable preview-attr-ranks">
 +
<caption>属性评级</caption>
 +
<tr>
 +
  <th>伤害</th>
 +
  <th>命中</th>
 +
  <th>回避</th>
 +
  <th>射速</th>
 +
  <th>生命</th>
 +
  <th>成长</th>
 +
<!--{if $armor[$n@index] neq ''}-->
 +
  <th>护甲</th>
 +
<!--{/if}-->
 +
</tr>
 +
<tr>
 +
  <td><!--{$pow[$n@index]}--></td>
 +
  <td><!--{$hit[$n@index]}--></td>
 +
  <td><!--{$dodge[$n@index]}--></td>
 +
  <td><!--{$rate[$n@index]}--></td>
 +
  <td><!--{$life[$n@index]}--></td>
 +
  <td><!--{$growth[$n@index]}--></td>
 +
<!--{if $armor[$n@index] neq ''}-->
 +
  <td><!--{$armor[$n@index]}--></td>
 +
<!--{/if}-->
 +
</tr>
 +
</table>
 +
<p>获得方式:<!--{$gain[$n@index]}--></p>
 +
</div>
 +
</div>
 +
<!--{/foreach}-->
 +
</div>
 
</div>
 
</div>
  
 
<script type="text/javascript">
 
<script type="text/javascript">
const charList = document.querySelectorAll("#plist li");
+
const charList = document.querySelectorAll("#preview-list li");
 +
let isOpen = false;
 +
let isMobile = false;
 +
if (document.getElementById("section_0")) {
 +
    isMobile = true;
 +
}
  
 
(window.RLQ=window.RLQ||[]).push(function(){
 
(window.RLQ=window.RLQ||[]).push(function(){
if (document.querySelector("#section_0")) {
+
if (isMobile) {
  document.getElementById("plist").style.cssText = "display: none;position: absolute;width: 9em;padding-left: 0;background-color: #333;box-shadow: 0 4px 4px rgba(0,0,0,0.2)";
+
    $("#preview-list").css("background", "#222");
  charList.forEach(function(item) {
+
    $("#preview-list").css("border-radius", "4px");
    item.style.cssText = "text-align: left;padding: 0 8px;width: calc(9em - 16px)";
+
    $("#preview-list").css("box-shadow", "0 4px 6px #0005");
  });
+
    $("#preview-list").css("display", "none");
  document.getElementById("content").addEventListener("click", function(e) {
+
    $("#preview-list").css("margin-top", "-4px");
     if (e.target != document.getElementById("pbutton")) {
+
    $("#preview-list").css("padding", "8px 0");
      document.getElementById("plist").style.display = "none";
+
    $("#preview-list").css("position", "absolute");
    }
+
    $("#preview-list").css("width", "calc(8em + 56px)");
  });
+
    charList.forEach(item => {
 +
        item.style.cssText = "height: 26px; margin-bottom: 0; padding: 6px 0 0 16px; width: 100%;";
 +
    });
 +
    $("#tab-indicator").css("display", "none");
 +
     $("#preview-menu").css("display", "flex");
 +
    $("#preview-menu").on("click", toggleMenu);
 
} else {
 
} else {
  document.querySelector("#plist").style.display = "flex";
+
    $("#preview-menu").css("display", "none");
  document.querySelector("#pbutton").style.display = "none";
+
    $("#preview-list").css("display", "flex");
  charList.forEach(function(item) {
+
    charList.forEach(item => {
    item.style.textAlign = "center";
+
        item.style.cssText = "height: 36px; padding-top: 12px; text-align: center; width: 10em;";
  });
+
    });
 
}
 
}
charList.forEach(function(item) {
+
charList.forEach(item => {
  item.onclick = parseOnClick;
+
    item.onclick = parseOnClick;
  item.onkeydown = parseOnKeyDown;
+
    item.onkeydown = parseOnKeyDown;
 
});
 
});
selectTab(charList[0]);
 
 
})
 
})
  
 
function parseOnClick() {
 
function parseOnClick() {
  if (!document.getElementById("section_0")
+
     selectTab(this);
      && this.style.borderBottomColor
 
      && this.style.borderBottomColor != "transparent") {
 
     return;
 
  }
 
  selectTab(this);
 
 
}
 
}
  
 
function parseOnKeyDown(e) {
 
function parseOnKeyDown(e) {
  if (!document.getElementById("section_0")
+
     if (e.key == "Enter") {
      && this.style.borderBottomColor
+
        selectTab(this);
      && this.style.borderBottomColor != "transparent") {
+
    }
     return;
 
  }
 
  if (e.key == "Enter") {
 
    selectTab(this);
 
  }
 
 
}
 
}
  
 
function selectTab(targetItem) {
 
function selectTab(targetItem) {
  if (document.getElementById("section_0")) {
+
    if (isMobile) {
    document.getElementById("plist").style.display = "none";
+
        toggleMenu();
    if (document.getElementById("pbutton").innerText == targetItem.innerText) {
+
        if ($("#preview-menu div:first-child").text() != targetItem.textContent) {
      return;
+
            $("#preview-menu div:first-child").text(targetItem.textContent);
 +
        }
 
     }
 
     }
    document.getElementById("pbutton").innerText = targetItem.innerText;
 
  }
 
 
    
 
    
  let index = 0;
+
    let index = 0;
  while (charList[index].innerText != targetItem.innerText) {
+
    while (charList[index] != targetItem) {
    index++;
+
        index++;
  }
+
    }
 
+
      
  let dataset = {
+
     if (!isMobile) {
     src: "",
+
        $("#tab-indicator").css("left", index*10 + "em");
     quote: "",
 
    type: "",
 
    pow: "",
 
    hit: "",
 
    dodge: "",
 
    rate: "",
 
    hp: "",
 
    growth: "",
 
    armor: "",
 
    gain: ""
 
  };
 
  switch (index) {
 
    case 0:
 
  <!--{foreach from=$c1 key=key item=item}-->
 
    dataset.<!--{$key}--> = "<!--{$item}-->";
 
  <!--{/foreach}-->
 
  break;
 
 
 
    case 1:
 
  <!--{foreach from=$c2 key=key item=item}-->
 
    dataset.<!--{$key}--> = "<!--{$item}-->";
 
  <!--{/foreach}-->
 
  break;
 
 
 
    case 2:
 
  <!--{foreach from=$c3 key=key item=item}-->
 
    dataset.<!--{$key}--> = "<!--{$item}-->";
 
  <!--{/foreach}-->
 
  break;
 
 
 
    case 3:
 
  <!--{foreach from=$c4 key=key item=item}-->
 
    dataset.<!--{$key}--> = "<!--{$item}-->";
 
  <!--{/foreach}-->
 
  break;
 
 
 
    case 4:
 
  <!--{foreach from=$c5 key=key item=item}-->
 
    dataset.<!--{$key}--> = "<!--{$item}-->";
 
  <!--{/foreach}-->
 
  break;
 
 
 
    case 5:
 
  <!--{foreach from=$c6 key=key item=item}-->
 
    dataset.<!--{$key}--> = "<!--{$item}-->";
 
  <!--{/foreach}-->
 
  break;
 
 
 
    case 6:
 
  <!--{foreach from=$c7 key=key item=item}-->
 
    dataset.<!--{$key}--> = "<!--{$item}-->";
 
  <!--{/foreach}-->
 
  break;
 
 
 
    case 7:
 
  <!--{foreach from=$c8 key=key item=item}-->
 
    dataset.<!--{$key}--> = "<!--{$item}-->";
 
  <!--{/foreach}-->
 
  }
 
 
 
  window.requestAnimationFrame(function() {
 
    document.querySelector("#pcontent").style.transition = "opacity 0.2s";
 
document.querySelector("#pcontent").style.opacity = "0";
 
 
 
    loadPreview(targetItem.innerText, dataset);
 
 
 
    setTimeout(function() {
 
  document.querySelector("#pcontent").style.transition = "opacity 0.2s";
 
  document.querySelector("#pcontent").style.opacity = "1";
 
    }, 400);
 
  });
 
 
 
  if (!document.getElementById("section_0")) {
 
    for (let i = 0; i < charList.length; i++) {
 
      if (charList[i].innerText != targetItem.innerText) {
 
        charList[i].style.borderBottomColor = "transparent";
 
charList[i].style.color = "rgba(255, 255, 255, 0.67)";
 
      }
 
 
     }
 
     }
     targetItem.style.borderBottomColor = "#F4C430";
+
     $("#previews").css("left", -index*100 + '%');
    targetItem.style.color = "white";
 
  }
 
 
    
 
    
  targetItem.blur();
+
    targetItem.blur();
 
}
 
}
  
function loadPreview(name, dataset) {
+
function toggleMenu() {
  setTimeout(function() {
+
    if (isOpen) {
    document.querySelector("a.pname").href = "/w/" + name;
+
        $("#preview-list").css("display", "none");
    document.querySelector("a.pname").innerText = name;
+
        $("#arrow-drop").css("transform", "rotate(0deg)");
    document.querySelector("#pimg").src = dataset.src;
+
        $("#preview-menu").blur();
    document.querySelector("#pimg").alt = name + "预览图";
 
    document.querySelector("p.pname").innerText = name;
 
    document.querySelector("#pquote").innerText = dataset.quote;
 
    document.querySelector("#ptype").innerText = dataset.type;
 
    document.querySelector("#ppow").innerText = dataset.pow;
 
    document.querySelector("#phit").innerText = dataset.hit;
 
    document.querySelector("#pdodge").innerText = dataset.dodge;
 
    document.querySelector("#prate").innerText = dataset.rate;
 
    document.querySelector("#php").innerText = dataset.hp;
 
    document.querySelector("#pgrowth").innerText = dataset.growth;
 
    if (dataset.armor && dataset.armor != "") {
 
      document.querySelectorAll("#pgrades th")[6].style.display = "table-cell";
 
      document.getElementById("parmor").style.display = "table-cell";
 
      document.querySelector("#parmor").innerText = dataset.armor;
 
 
     } else {
 
     } else {
      document.querySelectorAll("#pgrades th")[6].style.display = "none";
+
        $("#preview-list").css("display", "flex");
      document.getElementById("parmor").style.display = "none";
+
        $("#arrow-drop").css("transform", "rotate(180deg)");
 
     }
 
     }
     document.querySelector("#pgain").innerText = dataset.gain;
+
     isOpen ^= true;
  }, 200);
 
}
 
 
 
function toggleMenu() {
 
  let plist = document.querySelector("#plist");
 
  if (plist.style.display == "none") {
 
plist.style.display = "inline-block";
 
  } else {
 
plist.style.display = "none";
 
        document.getElementById("pbutton").blur();
 
  }
 
 
}</script></includeonly><noinclude>
 
}</script></includeonly><noinclude>
 
{{Documentation}}
 
{{Documentation}}
 
</noinclude>
 
</noinclude>

2021年5月24日 (一) 13:42的最新版本

Template-info-png.png 小工具文档  [查看] [编辑] [历史] [刷新]

本部件的预期用途是在活动专题页面中展示新增角色的信息,用例如梦间剧#登场联动角色

使用

以下用空行分隔开的每一部分是同一角色的信息,如果新角色数量没有那么多,请删去多余的部分。参数的具体说明在本模板之后。

{{#widget:NewCharPreView
|name=
|pic={{filename:|}}
|quote=
|type=
|pow=N|hit=N|dodge=N|rate=N|life=N|growth=N|armor=
|gain=

|name=
|pic={{filename:|}}
|quote=
|type=
|pow=N|hit=N|dodge=N|rate=N|life=N|growth=N|armor=
|gain=

|name=
|pic={{filename:|}}
|quote=
|type=
|pow=N|hit=N|dodge=N|rate=N|life=N|growth=N|armor=
|gain=

|name=
|pic={{filename:|}}
|quote=
|type=
|pow=N|hit=N|dodge=N|rate=N|life=N|growth=N|armor=
|gain=

|name=
|pic={{filename:|}}
|quote=
|type=
|pow=N|hit=N|dodge=N|rate=N|life=N|growth=N|armor=
|gain=

|name=
|pic={{filename:|}}
|quote=
|type=
|pow=N|hit=N|dodge=N|rate=N|life=N|growth=N|armor=
|gain=

|name=
|pic={{filename:|}}
|quote=
|type=
|pow=N|hit=N|dodge=N|rate=N|life=N|growth=N|armor=
|gain=

|name=
|pic={{filename:|}}
|quote=
|type=
|pow=N|hit=N|dodge=N|rate=N|life=N|growth=N|armor=
|gain=
}}

模板中为属性评级参数预置值“N”仅仅是为了方便在桌面端编辑时双击选中,请不要在实际使用时填入这个值。

  • name – 角色在游戏中的名称
  • pic – {{filepath:默认立绘图片名|缩略图宽度,建议512以上}}
  • quote – 登场台词
  • type – 手枪/冲锋枪/步枪/突击步枪/机枪/霰弹枪
  • pow – 伤害评级
  • hit – 命中评级
  • dodge – 回避评级
  • rate – 射速评级
  • life – 生命评级
  • growth – 成长评级
  • armor – 护甲评级,如没有请留空,不要删去
  • gain – 获得方式

示例

{{#widget:NewCharPreview
|name=UMP40
|pic={{filepath:Pic_UMP40.png|600}}
|quote=UMP40,登场了!指挥官,那些过时的家伙,就让我为您一一取代掉吧!
|type=冲锋枪
|pow=B|hit=A|dodge=A|rate=B|life=B|growth=A|armor=
|gain=打开物资箱概率获得,累计打开777个必定获得。

|name=KLIN
|pic={{filepath:Pic_KLIN.png|600}}
|quote=长官你要记好了!我就是要成为格里芬NO.1的人形——KLIN!
|type=冲锋枪
|pow=B|hit=B|dodge=S|rate=S|life=B|growth=B|armor=
|gain=【认知迷云Ⅳ】通关奖励。
}

UMP40
  • UMP40
  • KLIN

更多信息请见:UMP40

UMP40的立绘

UMP40

UMP40,登场了!指挥官,那些过时的家伙,就让我为您一一取代掉吧!

武器类型:冲锋枪

属性评级
伤害 命中 回避 射速 生命 成长
B A A B B A

获得方式:打开物资箱概率获得,累计打开777个必定获得。

更多信息请见:KLIN

KLIN的立绘

KLIN

长官你要记好了!我就是要成为格里芬NO.1的人形——KLIN!

武器类型:冲锋枪

属性评级
伤害 命中 回避 射速 生命 成长
B B S S B B

获得方式:【认知迷云Ⅳ】通关奖励。