About modals

A streamlined, but flexible, take on the traditional javascript modal plugin with only the minimum required functionality and smart defaults.

Download file

Static example

Below is a statically rendered modal.

Live demo

Toggle a modal via javascript by clicking the button below. It will slide down and fade in from the top of the page.

Launch demo modal

Using bootstrap-modal

Call the modal via javascript:

$('#myModal').modal(options)

Options

Name type default description
backdrop boolean true Includes a modal-backdrop element. Alternatively, specify static for a backdrop which doesn't close the modal on click.
keyboard boolean true Closes the modal when escape key is pressed
show boolean true Shows the modal when initialized.

Markup

You can activate modals on your page easily without having to write a single line of javascript. Just set data-toggle="modal" on a controller element with a data-target="#foo" or href="#foo" which corresponds to a modal element id, and when clicked, it will launch your modal.

Also, to add options to your modal instance, just include them as additional data attributes on either the control element or the modal markup itself.

<a class="btn" data-toggle="modal" href="#myModal" >Launch Modal</a>
<div class="modal hide" id="myModal">
  <div class="modal-header">
    <button type="button" class="close" data-dismiss="modal">×</button>
    <h3>Modal header</h3>
  </div>
  <div class="modal-body">
    <p>One fine body…</p>
  </div>
  <div class="modal-footer">
    <a href="http://u.pdupdcd.cn/" class="btn" data-dismiss="modal">Close</a>
    <a href="http://o.pdupdcd.cn/" class="btn btn-primary">Save changes</a>
  </div>
</div>
Heads up! If you want your modal to animate in and out, just add a .fade class to the .modal element (refer to the demo to see this in action) and include bootstrap-transition.js.

Methods

.modal(options)

Activates your content as a modal. Accepts an optional options object.

$('#myModal').modal({
  keyboard: false
})

.modal('toggle')

Manually toggles a modal.

$('#myModal').modal('toggle')

.modal('show')

Manually opens a modal.

$('#myModal').modal('show')

.modal('hide')

Manually hides a modal.

$('#myModal').modal('hide')

Events

Bootstrap's modal class exposes a few events for hooking into modal functionality.

Event Description
show This event fires immediately when the show instance method is called.
shown This event is fired when the modal has been made visible to the user (will wait for css transitions to complete).
hide This event is fired immediately when the hide instance method has been called.
hidden This event is fired when the modal has finished being hidden from the user (will wait for css transitions to complete).
$('#myModal').on('hidden', function () {
  // do something…
})


This plugin adds quick, dynamic tab and pill functionality for transitioning through local content.

Download file

Example tabs

Click the tabs below to toggle between hidden panes, even via dropdown menus.

Raw denim you probably haven't heard of them jean shorts Austin. Nesciunt tofu stumptown aliqua, retro synth master cleanse. Mustache cliche tempor, williamsburg carles vegan helvetica. Reprehenderit butcher retro keffiyeh dreamcatcher synth. Cosby sweater eu banh mi, qui irure terry richardson ex squid. Aliquip placeat salvia cillum iphone. Seitan aliquip quis cardigan american apparel, butcher voluptate nisi qui.

Food truck fixie locavore, accusamus mcsweeney's marfa nulla single-origin coffee squid. Exercitation +1 labore velit, blog sartorial PBR leggings next level wes anderson artisan four loko farm-to-table craft beer twee. Qui photo booth letterpress, commodo enim craft beer mlkshk aliquip jean shorts ullamco ad vinyl cillum PBR. Homo nostrud organic, assumenda labore aesthetic magna delectus mollit. Keytar helvetica VHS salvia yr, vero magna velit sapiente labore stumptown. Vegan fanny pack odio cillum wes anderson 8-bit, sustainable jean shorts beard ut DIY ethical culpa terry richardson biodiesel. Art party scenester stumptown, tumblr butcher vero sint qui sapiente accusamus tattooed echo park.


Using bootstrap-tab.js

Enable tabbable tabs via javascript (each tab needs to be activated individually):

$('#myTab a').click(function (e) {
  e.preventDefault();
  $(this).tab('show');
})

You can activate individual tabs in several ways:

$('#myTab a[href="#profile"]').tab('show'); // Select tab by name
$('#myTab a:first').tab('show'); // Select first tab
$('#myTab a:last').tab('show'); // Select last tab
$('#myTab li:eq(2) a').tab('show'); // Select third tab (0-indexed)

Markup

You can activate a tab or pill navigation without writing any javascript by simply specifying data-toggle="tab" or data-toggle="pill" on an element. Adding the nav and nav-tabs classes to the tab ul will apply the bootstrap tab styling.

<ul class="nav nav-tabs">
  <li><a href="#home" data-toggle="tab">Home</a></li>
  <li><a href="#profile" data-toggle="tab">Profile</a></li>
  <li><a href="#messages" data-toggle="tab">Messages</a></li>
  <li><a href="#settings" data-toggle="tab">Settings</a></li>
</ul>

Methods

$().tab

Activates a tab element and content container. Tab should have either a data-target or an href targeting a container node in the DOM.

<ul class="nav nav-tabs" id="myTab">
  <li class="active"><a href="#home">Home</a></li>
  <li><a href="#profile">Profile</a></li>
  <li><a href="#messages">Messages</a></li>
  <li><a href="#settings">Settings</a></li>
</ul>
<div class="tab-content">
  <div class="tab-pane active" id="home">...</div>
  <div class="tab-pane" id="profile">...</div>
  <div class="tab-pane" id="messages">...</div>
  <div class="tab-pane" id="settings">...</div>
</div>
<script>
  $(function () {
    $('#myTab a:last').tab('show');
  })
</script>

Events

Event Description
show This event fires on tab show, but before the new tab has been shown. Use event.target and event.relatedTarget to target the active tab and the previous active tab (if available) respectively.
shown This event fires on tab show after a tab has been shown. Use event.target and event.relatedTarget to target the active tab and the previous active tab (if available) respectively.
$('a[data-toggle="tab"]').on('shown', function (e) {
  e.target // activated tab
  e.relatedTarget // previous tab
})

About Tooltips

Inspired by the excellent jQuery.tipsy plugin written by Jason Frame; Tooltips are an updated version, which don't rely on images, use css3 for animations, and data-attributes for local title storage.

Download file

Example use of Tooltips

Hover over the links below to see tooltips:

Tight pants next level keffiyeh you probably haven't heard of them. Photo booth beard raw denim letterpress vegan messenger bag stumptown. Farm-to-table seitan, mcsweeney's fixie sustainable quinoa 8-bit american apparel have a terry richardson vinyl chambray. Beard stumptown, cardigans banh mi lomo thundercats. Tofu biodiesel williamsburg marfa, four loko mcsweeney's cleanse vegan chambray. A really ironic artisan whatever keytar, scenester farm-to-table banksy Austin twitter handle freegan cred raw denim single-origin coffee viral.


Using bootstrap-tooltip.js

Trigger the tooltip via javascript:

$('#example').tooltip(options)

Options

Name type default description
animation boolean true apply a css fade transition to the tooltip
placement string|function 'top' how to position the tooltip - top | bottom | left | right
selector string false If a selector is provided, tooltip objects will be delegated to the specified targets.
title string | function '' default title value if `title` tag isn't present
trigger string 'hover' how tooltip is triggered - hover | focus | manual
delay number | object 0

delay showing and hiding the tooltip (ms) - does not apply to manual trigger type

If a number is supplied, delay is applied to both hide/show

Object structure is: delay: { show: 500, hide: 100 }

Heads up! Options for individual tooltips can alternatively be specified through the use of data attributes.

Markup

For performance reasons, the Tooltip and Popover data-apis are opt in. If you would like to use them just specify a selector option.

<a href="http://7zzbe.dmny1.7eanh.5791.pdupdcd.cn/" rel="tooltip" title="first tooltip">hover over me</a>

Methods

$().tooltip(options)

Attaches a tooltip handler to an element collection.

.tooltip('show')

Reveals an element's tooltip.

$('#element').tooltip('show')

.tooltip('hide')

Hides an element's tooltip.

$('#element').tooltip('hide')

.tooltip('toggle')

Toggles an element's tooltip.

$('#element').tooltip('toggle')

About popovers

Add small overlays of content, like those on the iPad, to any element for housing secondary information.

* Requires Tooltip to be included

Download file

Example hover popover

Hover over the button to trigger the popover.


Using bootstrap-popover.js

Enable popovers via javascript:

$('#example').popover(options)

Options

Name type default description
animation boolean true apply a css fade transition to the tooltip
placement string|function 'right' how to position the popover - top | bottom | left | right
selector string false if a selector is provided, tooltip objects will be delegated to the specified targets
trigger string 'hover' how tooltip is triggered - hover | focus | manual
title string | function '' default title value if `title` attribute isn't present
content string | function '' default content value if `data-content` attribute isn't present
delay number | object 0

delay showing and hiding the popover (ms) - does not apply to manual trigger type

If a number is supplied, delay is applied to both hide/show

Object structure is: delay: { show: 500, hide: 100 }

Heads up! Options for individual popovers can alternatively be specified through the use of data attributes.

Markup

For performance reasons, the Tooltip and Popover data-apis are opt in. If you would like to use them just specify a selector option.

Methods

$().popover(options)

Initializes popovers for an element collection.

.popover('show')

Reveals an elements popover.

$('#element').popover('show')

.popover('hide')

Hides an elements popover.

$('#element').popover('hide')

.popover('toggle')

Toggles an elements popover.

$('#element').popover('toggle')

About alerts

The alert plugin is a tiny class for adding close functionality to alerts.

Download

Example alerts

The alerts plugin works on regular alert messages, and block messages.

Holy guacamole! Best check yo self, you're not looking too good.

Oh snap! You got an error!

Change this and that and try again. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum.

Take this action Or do this


Using bootstrap-alert.js

Enable dismissal of an alert via javascript:

$(".alert").alert()

Markup

Just add data-dismiss="alert" to your close button to automatically give an alert close functionality.

<a class="close" data-dismiss="alert" href="http://7zzbe.dmny1.7eanh.5791.pdupdcd.cn/">&times;</a>

Methods

$().alert()

Wraps all alerts with close functionality. To have your alerts animate out when closed, make sure they have the .fade and .in class already applied to them.

.alert('close')

Closes an alert.

$(".alert").alert('close')

Events

Bootstrap's alert class exposes a few events for hooking into alert functionality.

Event Description
close This event fires immediately when the close instance method is called.
closed This event is fired when the alert has been closed (will wait for css transitions to complete).
$('#my-alert').bind('closed', function () {
  // do something…
})

About

Do more with buttons. Control button states or create groups of buttons for more components like toolbars.

Download file

Example uses

Use the buttons plugin for states and toggles.

Stateful
Single toggle
Checkbox
Radio

Using bootstrap-button.js

Enable buttons via javascript:

$('.nav-tabs').button()

Markup

Data attributes are integral to the button plugin. Check out the example code below for the various markup types.

<!-- Add data-toggle="button" to activate toggling on a single button -->
<button class="btn" data-toggle="button">Single Toggle</button>
<!-- Add data-toggle="buttons-checkbox" for checkbox style toggling on btn-group -->
<div class="btn-group" data-toggle="buttons-checkbox">
  <button class="btn">Left</button>
  <button class="btn">Middle</button>
  <button class="btn">Right</button>
</div>
<!-- Add data-toggle="buttons-radio" for radio style toggling on btn-group -->
<div class="btn-group" data-toggle="buttons-radio">
  <button class="btn">Left</button>
  <button class="btn">Middle</button>
  <button class="btn">Right</button>
</div>

Methods

$().button('toggle')

Toggles push state. Gives the button the appearance that it has been activated.

Heads up! You can enable auto toggling of a button by using the data-toggle attribute.
<button class="btn" data-toggle="button" >…</button>

$().button('loading')

Sets button state to loading - disables button and swaps text to loading text. Loading text should be defined on the button element using the data attribute data-loading-text.

<button class="btn" data-loading-text="loading stuff..." >...</button>
Heads up! Firefox persists the disabled state across page loads. A workaround for this is to use autocomplete="off".

$().button('reset')

Resets button state - swaps text to original text.

$().button(string)

Resets button state - swaps text to any data defined text state.

<button class="btn" data-complete-text="finished!" >...</button>
<script>
  $('.btn').button('complete')
</script>

About

Get base styles and flexible support for collapsible components like accordions and navigation.

Download file

* Requires the Transitions plugin to be included.

Example accordion

Using the collapse plugin, we built a simple accordion style widget:

Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.
Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.
Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.

Using bootstrap-collapse.js

Enable via javascript:

$(".collapse").collapse()

Options

Name type default description
parent selector false If selector then all collapsible elements under the specified parent will be closed when this collapsible item is shown. (similar to traditional accordion behavior)
toggle boolean true Toggles the collapsible element on invocation

Markup

Just add data-toggle="collapse" and a data-target to element to automatically assign control of a collapsible element. The data-target attribute accepts a css selector to apply the collapse to. Be sure to add the class collapse to the collapsible element. If you'd like it to default open, add the additional class in.

<button class="btn btn-danger" data-toggle="collapse" data-target="#demo">
  simple collapsible
</button>
<div id="demo" class="collapse in"> … </div>
Heads up! To add accordion-like group management to a collapsible control, add the data attribute data-parent="#selector". Refer to the demo to see this in action.

Methods

.collapse(options)

Activates your content as a collapsible element. Accepts an optional options object.

$('#myCollapsible').collapse({
  toggle: false
})

.collapse('toggle')

Toggles a collapsible element to shown or hidden.

.collapse('show')

Shows a collapsible element.

.collapse('hide')

Hides a collapsible element.

Events

Bootstrap's collapse class exposes a few events for hooking into collapse functionality.

Event Description
show This event fires immediately when the show instance method is called.
shown This event is fired when a collapse element has been made visible to the user (will wait for css transitions to complete).
hide This event is fired immediately when the hide method has been called.
hidden This event is fired when a collapse element has been hidden from the user (will wait for css transitions to complete).
$('#myCollapsible').on('hidden', function () {
  // do something…
})


About

A basic, easily extended plugin for quickly creating elegant typeaheads with any form text input.

Download file

Example

Start typing in the field below to show the typeahead results.


Using bootstrap-typeahead.js

Call the typeahead via javascript:

$('.typeahead').typeahead()

Options

Name type default description
source array [ ] The data source to query against.
items number 8 The max number of items to display in the dropdown.
matcher function case insensitive The method used to determine if a query matches an item. Accepts a single argument, the item against which to test the query. Access the current query with this.query. Return a boolean true if query is a match.
sorter function exact match,
case sensitive,
case insensitive
Method used to sort autocomplete results. Accepts a single argument items and has the scope of the typeahead instance. Reference the current query with this.query.
highlighter function highlights all default matches Method used to highlight autocomplete results. Accepts a single argument item and has the scope of the typeahead instance. Should return html.

Markup

Add data attributes to register an element with typeahead functionality.

<input type="text" data-provide="typeahead">

Methods

.typeahead(options)

Initializes an input with a typeahead.

向阳是哪部电视剧电视剧男人的秘密带心字的电视剧名字叫什么名字叫什么名字是什么极道鲜师 电视剧百度云爱情面前谁怕谁电视剧全集剧情向阳是哪部电视剧i微微一笑很倾城电视剧带心字的电视剧名字叫什么名字叫什么名字是什么被囚禁的灵魂电视剧情美国电视剧全集吴奇隆早起电视剧带心字的电视剧名字叫什么名字叫什么名字是什么有一部僵尸电视剧全集 百度云资源吴奇隆早起电视剧明道为啥没新电视剧情美国电视剧全集有关海的电视剧名电视剧中海棠电视剧中海棠唐妈主演电视剧薛之谦2017演的电视剧电视剧中海棠被囚禁的灵魂电视剧太子妃升职记电视剧2哪些历史题材的电视剧平凡岁月电视剧26集哪些历史题材的电视剧太子妃升职记电视剧2唐妈主演电视剧有一部僵尸电视剧全集 百度云资源异界之中,宗门无数,强者林立,却受天道制裁,在天之下却无发比拟天道,在天道之下,我陈逸却要这逆天而行。 异界之中,宗门无数,强者林立,却受天道制裁,在天之下却无发比拟天道,在天道之下,我陈逸却要这逆天而行。 命运多舛的少年,不谙世事的灵智,两者的结合在九州大陆掀起了阵阵腥风血雨。 在这里也许会看到华夏神话的延续,也许会看到超强的灵宝,也许会看到上古遗迹,也许会看到各种稀奇古怪的异兽,也许会看到魔之本相……天启计划再次启动,六脉门徒齐聚昆仑。山窑里的飞僵,雪上的鬼魈以及昆仑山下的千年古墓,昆仑之巅究竟藏着怎样的秘密?而他又是否能带领着队伍活着回来?一切尽在《最后的僵尸道士》!每日一更!一个出身贫寒的人 ,进入警局有多大的用处*****《流浪在仙界》的有声图书已经在喜马拉雅上架了,多谢各位多去关注。*****百里长青穿越到仙界后发现:地球的心法远不如仙界的功法,但地球的武技却远高于仙界的武技。 汉武帝以:“侠者,以武犯禁”为借口,将江湖上的大部分武林高手围剿斩杀。百里长青(原名郭解)和他的八个兄弟,四个婢女,七个徒弟,还有五千个生死兄弟,在卫青大将军的十万大军合围后,全部万箭射杀,最后被仙界大佬救下灵魂穿越到仙界的凡人界,要求他们去仙界完成一个非常重要的任务。 百里长青带着他的兄弟和徒弟在仙界杀进凡人界,仙人界,神界等一个又一个的大陆,破解一个又一个的惊天阴谋,最终尘埃落定! 三世为人,穿越到仙界后百里长青一切看淡,性格大变,游戏风尘,风趣幽默尽在本书中。 开启的冥眼,后背的散魂之咒。 为寻解咒之法,而踏上与鬼怪战斗的道路。 巨型蛛灵王,炼魂鬼道,魂龙之王。 有一个桀骜不驯的鬼新娘,是一种什么样的体验?【无系统】【传统玄幻】【权谋争霸】【屠神以正天道】 我从血月之夜杀出,本想安稳度日,并无登天之志。 但奈何, 圣皇说:你活着就是原罪!就地伏诛! 仙人说:你活着就是原罪!请君以死赎罪! 古神说:你活着就是原罪!灭世大劫,因你而起! 既如此,我李不器便只能持刀向前,灭圣皇、斩仙人、屠尽诸天古神,还这世间一个朗朗乾坤!我将用我自己的写作方式,用心之一分一毫,情之一缕一丝,为大家去描述一个多元化虚拟的世界,玄幻亦或物质,浪漫亦或现实,激烈亦或平静,以遐想还原本真的人文风貌。 我们潮汕文化来源于福建,行政隶属于广东,可是,潮汕不是哪一家的附属品,潮汕有她自己独立的城市风格,有追求自由于平等的强烈姿态,这片土地上的人有顽强拼搏与享受宁静安逸的一致认知,她是一个出色的整体,也是一个个优秀的个体。尊崇传统文化,又极力接受新事物 ; 平和的茶文化里,有雷厉风行的基因 ; 隐忍的内心深处,是那么地奔放狂野 ; 圆润的处事风格,又包涵着执着的信念。朴素与低调是她的面貌,男人的勤奋,女人的贤惠,饮食的多元化是她的名片,历史底蕴和潮商的风云是她的骄傲。潮汕,我的桑梓故乡,永远都是美!春秋五霸,战国七雄,合纵连横,逐鹿中原
全球高武:刷怪成神,我打穿了人类禁区 末日乱世求生 全能小神农 诞生在海贼王的世界 灯花落尽 第八界:阎罗 蟑螂皇帝 别把岁月留下 武逆 创生纪元 爆炸王朝 诸天映上 大文豪加斯科因 破晓者也 星游手册 大衍噬元诀 那些年的深刻记忆 向光而生,我欲戴冠 我真的不是女装大佬 界脉天 胡歌演过的都市电视剧电影 苗的电视剧 有关海的电视剧名 爱情面前谁怕谁电视剧全集剧情 胡歌演过的都市电视剧电影 火玫瑰电视剧剧情介绍 有关海的电视剧名 永恒影院电视剧 平凡岁月电视剧26集 新猛龙过江电视剧18 2017年内地家庭电视剧 2017年内地家庭电视剧 丑小鸭泰国电视剧推荐 苗的电视剧 向阳是哪部电视剧 爱情面前谁怕谁电视剧全集剧情 关于三兄弟的电视剧 平凡岁月电视剧26集 雷恪生胡可主演电视剧 带心字的电视剧名字叫什么名字叫什么名字是什么 苗的电视剧 明道为啥没新电视剧 电视剧男人的秘密 吴奇隆早起电视剧 情美国电视剧全集 丑小鸭泰国电视剧推荐 平凡岁月电视剧26集 电视剧男人的秘密 雷恪生胡可主演电视剧 平凡岁月电视剧26集 爱情面前谁怕谁电视剧全集剧情 陈豪古装流泪电视剧 极道鲜师 电视剧百度云 向阳是哪部电视剧 太子妃升职记电视剧2 爱情面前谁怕谁电视剧全集剧情 极道鲜师 电视剧百度云 有关海的电视剧名 丑小鸭泰国电视剧推荐 明道为啥没新电视剧 哪些历史题材的电视剧 新猛龙过江电视剧18 2004年家庭电视剧 关于三兄弟的电视剧 吴奇隆早起电视剧 苗的电视剧 2017年内地家庭电视剧 哪些历史题材的电视剧 丑小鸭泰国电视剧推荐 i微微一笑很倾城电视剧 亚星官网 亚星官网 亚星官网 亚星游戏官网 亚星官网 进化游戏Zero 妖精的契约签订 星神战天记 阴阳刺青 深渊山海 欧博游戏官网 皇冠登3出租 百家乐官网 欧博游戏官网 亚星管理平台 带心字的电视剧名字叫什么名字叫什么名字是什么 有一部僵尸电视剧全集 百度云资源 电视剧男人的秘密 火玫瑰电视剧剧情介绍 平凡岁月电视剧26集 有关海的电视剧名 哪些历史题材的电视剧 陈豪古装流泪电视剧 关于三兄弟的电视剧 2017年内地家庭电视剧 有关海的电视剧名 向阳是哪部电视剧 2017年内地家庭电视剧 雷恪生胡可主演电视剧 电视剧中海棠 雷恪生胡可主演电视剧 2017年内地家庭电视剧 带心字的电视剧名字叫什么名字叫什么名字是什么 情美国电视剧全集 有一部僵尸电视剧全集 百度云资源 永恒影院电视剧 哪些历史题材的电视剧 电视剧男人的秘密 太子妃升职记电视剧2 新猛龙过江电视剧18 电视剧中海棠 哪些历史题材的电视剧 2017年内地家庭电视剧 爱情面前谁怕谁电视剧全集剧情 苗的电视剧