首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何创建一个在鼠标按下时自动播放,但在鼠标向上停止播放的幻灯片?

要创建一个在鼠标按下时自动播放,但在鼠标向上停止播放的幻灯片,可以使用以下步骤:

  1. HTML结构:创建一个包含幻灯片图片的容器,可以使用<div>元素,并为其添加一个唯一的ID,例如<div id="slideshow">。在该容器内部,创建一个<img>元素来显示幻灯片图片。
  2. CSS样式:使用CSS样式来设置幻灯片容器的宽度、高度和其他样式属性,以及设置图片的样式。可以使用position: relative;来设置容器的定位属性,以便后续实现动画效果。
  3. JavaScript代码:使用JavaScript来实现幻灯片的自动播放和停止播放功能。
  • 首先,获取幻灯片容器的引用,可以使用document.getElementById()方法,例如var slideshow = document.getElementById("slideshow");
  • 然后,创建一个变量来存储幻灯片的当前状态,例如var isPlaying = false;
  • 接下来,为幻灯片容器添加鼠标按下和鼠标向上的事件监听器。
代码语言:txt
复制
 - 当鼠标按下时,将`isPlaying`变量设置为`true`,表示幻灯片正在播放。可以使用`slideshow.addEventListener("mousedown", function() { isPlaying = true; });`来添加鼠标按下事件监听器。
代码语言:txt
复制
 - 当鼠标向上时,将`isPlaying`变量设置为`false`,表示幻灯片停止播放。可以使用`slideshow.addEventListener("mouseup", function() { isPlaying = false; });`来添加鼠标向上事件监听器。
  • 最后,使用setInterval()函数和clearInterval()函数来实现幻灯片的自动播放和停止播放。
代码语言:txt
复制
 - 使用`setInterval()`函数创建一个定时器,定时执行幻灯片的自动播放功能。可以使用`setInterval(function() { if (isPlaying) { // 播放下一张幻灯片 } }, 2000);`来创建定时器,其中`2000`表示每隔2秒自动播放下一张幻灯片。
代码语言:txt
复制
 - 使用`clearInterval()`函数停止定时器,当鼠标向上时停止幻灯片的自动播放。可以在鼠标向上事件监听器中添加`clearInterval()`函数,例如`slideshow.addEventListener("mouseup", function() { isPlaying = false; clearInterval(timer); });`,其中`timer`是定时器的引用。
  1. 完整示例代码:
代码语言:html
复制
<!DOCTYPE html>
<html>
<head>
  <style>
    #slideshow {
      width: 500px;
      height: 300px;
      position: relative;
      overflow: hidden;
    }
    #slideshow img {
      width: 100%;
      height: 100%;
    }
  </style>
</head>
<body>
  <div id="slideshow">
    <img src="slide1.jpg" alt="Slide 1">
    <img src="slide2.jpg" alt="Slide 2">
    <img src="slide3.jpg" alt="Slide 3">
  </div>

  <script>
    var slideshow = document.getElementById("slideshow");
    var isPlaying = false;
    var timer;

    slideshow.addEventListener("mousedown", function() {
      isPlaying = true;
    });

    slideshow.addEventListener("mouseup", function() {
      isPlaying = false;
      clearInterval(timer);
    });

    timer = setInterval(function() {
      if (isPlaying) {
        // 播放下一张幻灯片
        var currentSlide = slideshow.querySelector("img:not([style*='display: none'])");
        var nextSlide = currentSlide.nextElementSibling || slideshow.firstElementChild;
        currentSlide.style.display = "none";
        nextSlide.style.display = "block";
      }
    }, 2000);
  </script>
</body>
</html>

这个示例代码创建了一个宽度为500px,高度为300px的幻灯片容器,包含三张幻灯片图片。当鼠标按下时,幻灯片会自动播放,每隔2秒切换到下一张幻灯片。当鼠标向上时,幻灯片停止播放。可以根据实际需求修改容器的尺寸、图片路径和切换时间。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

JavaScript 轮播图:让网页焕发生机

欢迎大家来到本篇博客,今天我们将一起探讨如何使用 JavaScript 创建一个精美的轮播图。轮播图是现代网站设计关键元素之一,它能够使网页更加吸引人,提高用户体验。...我们可以将以下代码添加到script.js文件底部:// 自动播放let slideInterval = setInterval(() => plusSlides(1), 3000);// 鼠标悬停停止自动播放....slideshow-container").addEventListener("mouseenter", () => { clearInterval(slideInterval);});// 鼠标离开继续自动播放...当鼠标悬停在轮播图上自动播放会暂停,鼠标离开后会继续。6. 添加轮播图控制要使用户能够手动控制轮播图,我们需要在HTML中添加交互元素。...图片预加载:为了更好性能,您可以轮播图初始化时预加载所有图像。响应式设计:确保您轮播图不同屏幕尺寸都能正常显示。无限循环:允许用户最后一张幻灯片后继续浏览第一张幻灯片。8.

62710

【Java 进阶篇】创建 JavaScript 轮播图:让网页焕发生机

欢迎大家来到本篇博客,今天我们将一起探讨如何使用 JavaScript 创建一个精美的轮播图。轮播图是现代网站设计关键元素之一,它能够使网页更加吸引人,提高用户体验。...我们可以将以下代码添加到script.js文件底部: // 自动播放 let slideInterval = setInterval(() => plusSlides(1), 3000); // 鼠标悬停停止自动播放...slideshow-container").addEventListener("mouseenter", () => { clearInterval(slideInterval); }); // 鼠标离开继续自动播放...当鼠标悬停在轮播图上自动播放会暂停,鼠标离开后会继续。 6. 添加轮播图控制 要使用户能够手动控制轮播图,我们需要在HTML中添加交互元素。...图片预加载:为了更好性能,您可以轮播图初始化时预加载所有图像。 响应式设计:确保您轮播图不同屏幕尺寸都能正常显示。 无限循环:允许用户最后一张幻灯片后继续浏览第一张幻灯片。 8.

35020

【Java 进阶篇】深入浅出:Bootstrap 轮播图

无需深入了解复杂代码,只需按照一些基本步骤,您就可以创建自己轮播图。 本篇博客中,我们将深入探讨Bootstrap轮播图。我们将从什么是轮播图开始,然后逐步介绍如何创建和自定义它们。...您可以浏览器中打开HTML文档,查看轮播图效果。轮播图会自动播放幻灯片,并允许用户手动切换幻灯片。...// 初始化轮播图并设置切换效果 $("#myCarousel").carousel({ interval: 2000, pause: "false" // 鼠标悬停不暂停自动播放...我们还使用JavaScript代码来启用和禁用轮播自动播放。 结语 本博客中,我们深入研究了如何使用Bootstrap创建漂亮轮播图。我们从什么是轮播图开始,然后逐步介绍了如何创建和自定义它们。...希望这篇博客对那些初学者和新手有所帮助,帮助他们更好地理解如何创建和自定义Bootstrap轮播图。无论您是在学习前端开发还是构建网站,Bootstrap都是一个强大工具,可以加速您工作流程。

40230

jQuery幻灯片插件slick

简介 slick 是一个基于 jQuery 幻灯片插件,具有以下特点: 支持响应式 浏览器支持 CSS3 ,则使用 CSS3 过度/动画 支持移动设备滑动 支持桌面浏览器鼠标拖动 支持循环 支持左右控制...支持动态添加、删除、过滤 支持自动播放、圆点、箭头、回调等等 兼容 浏览器兼容:兼容 IE7+ 及其他主流浏览器,若要兼容 IE7,需修改 CSS(slick.css)。...autoplaySpeed 整数 3000 自动播放间隔 centerMode 布尔值 false 中心模式 centerPadding 字符串 ’50px’ 中心模式左右内边距 cssEase 字符串...method null 再次初始化后回调函数 pauseOnHover 布尔值 true 鼠标悬停暂停自动播放 responsive object null 断点触发设置 slide 字符串 ‘div...slickPlay() 开始自动播放 slickGoTo() index : int 切换到第 x 张 slickCurrentSlide() 返回当前幻灯片索引 slickAdd() element

3.1K30

前端|Bootstrap 实例 - 简单轮播插件

1.Bootstrap轮播(Carousel)插件 Bootstrap 轮播(Carousel)插件是一种灵活响应式向站点添加滑块方式。...除此之外,内容也是足够灵活,可以是图像、内嵌框架、视频或者其他您想要放置任何类型内容。要使用Bootstrap,需要先引入Bootstrap相关文件。 ?...图1.2 轮播图代码 3.轮播图组件注解 (1)data-ride=”carousel”:触发轮播动作,实现自动播放,用于标记轮播页面加载就开始动画播放 (2)data-intarval=”1000...”:表示播放时间间隔,单位毫秒,默认值5000 (3)data-wrap=”true”:表示循环播放,如果是false会停止到最后一张 (4)data-pause=”hover”:表示暂停(默认),鼠标移上去暂停到当前幻灯片...:向轮播传递一个滑动索引,把滑块移动到一个特定索引,从0开始计数 (8)data-slide:接受关键字prev或next,用来改变幻灯片位置 (9)class="left carousel-control

3.8K20

如何让浏览器自动播放网页视频

有些视频网站,网页打开后,并不会自动播放视频,需要人工点击视频或者播放播放按钮,才能进入视频播放状态。有没有办法一打开页面就自动播放视频呢?下面我们就来分析研究一。...图片        首先使用浏览器开发者工具查看,原来播放器是一个video元素,首先尝试一直接点击这个veido元素,是否可以触发视频播放。...图片        木头浏览器项目管理器中,创建一个点击元素步骤,添加点击目标为video元素。点击单步测试,发现页面并没有动静,视频也没有播放。...图片        看来有必要使出我们杀手涧,控制鼠标指针移动到播放器上方,再点击鼠标左键。...如下图所示,木头浏览器项目管理窗口,创建滑块验证步骤,把播放器元素当成滑块元素,获取滑块元素后,移动鼠标指针到滑块上方,然后执行鼠标左键和松开左键,就相当于点击操作了。

82140

图片浏览器?Qt也可以实现!

引言 Windows图片浏览器大家都用过,可以查看当前文件夹下图片,往上翻、往下翻并且自动播放。...在这一节里,Jungle将用Qt来设计这么一个图片浏览器,实现以下功能: ①浏览电脑里文件夹,将当前文件夹下图片列表罗列出来; ②鼠标点击列表上某一张图片,图片将显示出来; ③可以控制浏览当前图片上一张和下一张...; ④实现自动播放开始和停止控制。...里按序显示当前文件夹下图片文件列表; 鼠标点击列表上某张图,label里显示该图; 按钮“上一张”“下一张”实现图片转换; 自动播放通过QTimer实现,合理定时; 因此我们设计类如下: #include...ui; ///自动播放定时器 QTimer *timer; ///当前文件夹路径 QString currentDirPath; ///当前文件夹里图片文件数量 int numofPic

93510

windows10切换快捷键_Word快捷键大全

例如, Ctrl + N 可在“画图”中创建新图片。 PS: 借助触摸键盘, Ctrl 键即可看到一些快捷方式。...退出全屏 Enter 选择焦点中内容 空格键 或 Ctrl + P 播放或暂停(当视频处于焦点中) Alt + 向左键 或 Win + Backspace 返回 Ctrl + T 打开或关闭“重复播放...功能 空格键(“集锦”中) 选择项目并进入选择模式 Enter(从选择模式) 处于选择模式选择项目 空格键(查看照片) 显示或隐藏命令 空格键(查看视频) 播放或暂停视频 箭头键(集锦中)...向上、向下、向左或向右滚动 左箭头或右箭头键(位于单个项目或幻灯片放映上) 显示下一个或上一个项目 箭头键(位于缩放照片上) 照片内移动 Ctrl + 加号或减号(+ 或 -) 放大或缩小(查看照片时...F5(查看项目) 开始幻灯片放映 Alt + Enter 查看文件信息 Ctrl + L 设置为锁屏界面 Ctrl + N(“相册”视图中) 创建新相册 Ctrl + R(“相册”视图中) 删除相册

5.3K10

怎样用ppt制作动画效果

对于整张幻灯片动画效果,PowerPoint2003提供了丰富切换效果样式,可以幻灯片切换”任务窗格面板中,对选定(或是全部)幻灯片直接进行套用,并且还能设定切换速度、声音和切换方式,接下来同...制作第1张幻灯片,其中包含4个人物头像和姓名。大致播放效果为:首先有“学校主要领导介绍”字样标题从屏幕右侧飞入,然后屏幕中央渐渐出现一个图标,图标完全显现后绕着特定曲线运动到屏幕右上角停止。...然后每点击一次鼠标,就会以不同动画效果出现一个人物头像图片及其对应的人名。 新建一张幻灯片在“幻灯片版式”和“幻灯片设计—设计模板”任务窗格中,分别为它套用一种版式和一种设计模板。...幻灯片播放按照由上至顺序对自定义动画列表中动画事件进行播放,我们可通过下面的“重新排序”上下箭头按钮来调整上下顺序。...这里共包含了4个项目文本列表项目,我们可点击向上和向下小箭头来分别进行展开和折叠。选中某一个列表项目后,可以更改有关这个动画事件效果设置。

2.9K20

【十分钟】学会微信小游戏,攀登不止小游戏制作(IVX 快速开发教程十一)

设置之后我们物理世界中创建一个触发器,用触发器定时响应跳跃内容: 接下来我们点击触发器,使其能够进行自动播放: 对该触发器设置一个事件,事件触发后开始判断当前触碰物体值是不是排除外目标...11.3 完成小球移动 此时我们需要将小球移动到黄色矩形块上演示黄色矩形块不进行跳动。在此我们在前台添加事件,当鼠标或手指某个位置使小球朝着该方向平移。...我们先创建一个变量命名为x,该变量用于记录 x 坐标: 之后事件中为其赋值: 完成后,我们判断位置小球左侧还是右侧,若在左侧小球则往左侧移动,若在右侧小球则往右侧移动。...判断未知是否小球左侧还是右侧只需要使用小球 x 坐标减去下位置 x 值,结果为负数则表示下在右侧,若按下位置值为正数则表示位置小球左侧,之后设置一个数值变量命名为方向,值 1...页面中增加文本与按钮组件: 我们此时对其应该设置隐藏,点击可见按钮即可: 随后停止游戏将其开启可见: 随后为重新开始按钮其添加重启事件,首先将文本设置隐藏: 随后使物理世界、触发器重新播放

1.2K30

Android 滑动效果入门篇(一)—— ViewFlipper

ViewFilpper 是Android官方提供一个View容器类,继承于ViewAnimator类,用于实现页面切换,也可以设定时间间隔,让它自动播放。...(true),设置是否自动播放功能,true为自动播放,false为不自动播放,开启自动播放设为true 2、 setFlipInterval(int milliseconds),设置View播放时间间隔...,如3000(3秒) 3、 startFlipping(),开始自动播放 停止自动播放View,设置成员函数如下: 1、 stopFlipping(),停止自动播放 2、 setAutoStart(false...1、onDown(MotionEvent e):down事件,表示事件 2、onSingleTapUp(MotionEvent e):一次点击up事件,表示抬起事件 3、onShowPress...e2, float distanceX, float distanceY):屏幕上拖动事件,即down点——scroll拖动——up抬起点move移动事件 本示例滑动屏幕动画,仅用到了上面的

1.6K10

网页轮播图案例

5.鼠标不经过轮播图,轮播图也会自动播放图片。 ​ 6.鼠标经过,轮播图模块, 自动播放停止。 案例分析1 ① 因为js较多,我们单独新建js文件夹,再新建js文件, 引入页面中。...③ 但是图片有5张,我们小圆圈只有4个少一个,必须加一个判断条件 ④ 如果circle == 4 就 从新复原为 0 案例分析8. ① 自动播放功能 ② 添加一个定时器 ③ 自动播放轮播图,实际就类似于点击了右侧按钮...④ 此时我们使用手动调用右侧按钮点击事件 arrow_r.click() ⑤ 鼠标经过focus 就停止定时器 ⑥ 鼠标离开focus 就开启定时器 window.addEventListener...点击右侧按钮,小圆圈跟随一起变化 可以声明一个变量控制小圆圈播放 circle++; // 如果 circle == ol.childre.length 说明走到最后我们克隆这张图片了...点击左侧按钮,小圆圈跟随一起变化 可以声明一个变量控制小圆圈播放 circle--; // 如果 circle < 0 说明第一张图片 则小圆圈就要改为第四个小圆圈(3)

2.4K10

玩转Autorun.inf

(4)添加右键菜单    当我们右击刻录光盘,经常会在右键菜单中发现一个自动播放选项,其实这主要是利用Autorun.inf中Open命令来实现,其实我们还可以根据需要添加其它菜单命令。...   这样当我们将该文件刻录进光盘,右击光盘弹出菜单中就会有一个“打开记事本”命令了。   ...(5)改变缺省操作    一般情况应用autorun.inf光盘双击缺省操作大多是自动播放,即执行open后面的文件操作。...  //指定要运行程序路径和名称,在此为C盘1.exe   保存该文件,F5刷新桌面,再看“我电脑”中该盘符(在此为C盘),你会发现它磁盘图标变了,双击进入C盘,还会自动播放C盘1....要特别说明是,如果你要改变硬盘跟目录下没有自动播放文件,就应该把“OPEN”行删掉,否则就会因为找不到自动播放文件而打不开硬盘,此时只能用鼠标右键单击盘符弹出菜单中选“打开”才行.

64010

十一、飞机大战(IVX 快速开发教程)

在对象树种点击飞机图片组件,左侧组件栏中点击物体进行添加: 此时我们通过 web 浏览器进行调试,点击预览: 为了更好方便观察,我们在出现浏览器窗口中 F12,选择该窗口为手机浏览器窗口:...: 此时预览发现子弹会自动掉落,解决这个问题只需要在子弹组件添加一个运动组件: 我们点击运动组件,设置移动方向为 90 度则为垂直向上运动,随后给与这个方向设置移动速度,设置为 -600 则为表示反方向运动...,最后还需要开启自动播放才会生效: 接着我们预览将会发现已经成功使该子弹反方向进行运动,此时还要注意要将子弹固定旋转属性开启,否则子弹将会在之后碰撞中发生不理想效果。...接着把子弹图片组件添加到对象组: 由于子弹是间隔发射,此时我们需要在前台中创建一个触发器定时发射子弹: 随后设置触发器时间间隔为 0.3,并且开启自动播放: 接着为触发器设置事件,条件为触发器触发...最终考虑用户体验,我们停止后再显示一个游戏结束文本。在前台中添加一个文本命名为游戏结束,默认为不可见: 敌机触碰到主角添加游戏结束文本显示操作即可:

1.3K30

HTML多行代码搞定微信8.0炸裂特效!CC++怎么能输「建议收藏」

创建一个 lottie 容器,使用 span 元素,因为 lottie 动画播放器需要挂载到一个具体 html 元素中。...loop: 是否循环播放,由于此处是表情选择弹出层中预览动画,所以支持循环播放。 autoplay:是否自动播放,这里设置为了否,后边让它在鼠标划过时再播放动画。...当鼠标划过表情,开始播放动画。 当鼠标划出表情停止动画。...设置表情动画宽高为 40px。 使用 lottie 加载动画,并设置循环播放为 false,自动播放为 true,来让表情发送自动播放动画,且只播放一次。...现在可以发送表情消息了,相关动画也会自动播放,接下来看一怎么实现炸弹全屏动画和对消息元素晃动效果。

2K20

Qt编写项目作品7-视频监控系统

封装了百度地图,视图切换,设备点位,鼠标获取经纬度等。 堆栈窗体,每个窗体都是个单独qwidget,方便编写自己代码。...双击摄像机节点自动播放视频,双击节点自动依次添加视频,会自动跳到下一个,双击父节点自动添加该节点所有视频。 摄像机节点拖曳到对应窗体播放视频,同时支持拖曳本地文件直接播放。...支持从url.txt中加载16通道视频播放,自动记忆最后通道对应视频,软件启动后自动打开播放。 右下角音量条控件,失去焦点自动隐藏,音量条带静音图标。...鼠标右键可删除当前+所有视频,截图当前+所有视频。 录像机管理、摄像机管理,可添加删除修改导入导出打印信息,立即应用新设备信息生成树状列表,不需重启。 pro文件中可以自由开启是否加载地图。...可设置1+4+9+16画面轮询,可设置轮询间隔以及轮询码流类型等,直接在主界面底部工具栏右侧单击启动轮询按钮即可,再次单击停止轮询。 默认超过10秒钟未操作自动隐藏鼠标指针。

1.2K20

【iVX 初级工程师培训教程 10篇文拿证】05 画布及飞机大战游戏制作

11.1.1 完成游戏角色制作 首先我们创建一个微信 2D小游戏: 创建好游戏场景后游戏界面中可以添加图片,作为游戏中元素。点击图片组件画布中绘制一个主角飞机。...在对象树种点击飞机图片组件,左侧组件栏中点击物体进行添加: 此时我们通过 web 浏览器进行调试,点击预览: 为了更好方便观察,我们在出现浏览器窗口中 F12,选择该窗口为手机浏览器窗口:...,最后还需要开启自动播放才会生效: 接着我们预览将会发现已经成功使该子弹反方向进行运动,此时还要注意要将子弹固定旋转属性开启,否则子弹将会在之后碰撞中发生不理想效果。...接着把子弹图片组件添加到对象组: 由于子弹是间隔发射,此时我们需要在前台中创建一个触发器定时发射子弹: 随后设置触发器时间间隔为 0.3,并且开启自动播放: 接着为触发器设置事件,条件为触发器触发...最终考虑用户体验,我们停止后再显示一个游戏结束文本。在前台中添加一个文本命名为游戏结束,默认为不可见: 敌机触碰到主角添加游戏结束文本显示操作即可:

90020

网页轮播图案例

轮播图也称为焦点图,是网页中比较常见网页特效。 功能需求: 1.鼠标经过轮播图模块,左右按钮显示,离开隐藏左右按钮。 2.点击右侧按钮一次,图片往左播放一张,以此类推,左侧按钮同理。...3.图片播放同时,下面小圆圈模块跟随一起变化。 4.点击小圆圈,可以播放相应图片。 5.鼠标不经过轮播图,轮播图也会自动播放图片。 6.鼠标经过,轮播图模块, 自动播放停止。...动态生成小圆圈 核心思路:小圆圈个数要跟图片张数一致 所以首先先得到ul里面图片张数(图片放入li里面,所以就是li个数) 利用循环动态生成小圆圈(这个小圆圈要放入ol里面) 创建节点createElement...自动播放功能 添加一个定时器 自动播放轮播图,实际就类似于点击了右侧按钮 此时我们使用手动调用右侧按钮点击事件arrow_r.click() window.addEventListener('load'...   // console.log(ul.children.length);    for (var i = 0; i < ul.children.length; i++) {        // 创建一个

5.5K21

网页轮播图案例

轮播图也称为焦点图,是网页中比较常见网页特效。 功能需求: 1.鼠标经过轮播图模块,左右按钮显示,离开隐藏左右按钮。 2.点击右侧按钮一次,图片往左播放一张,以此类推,左侧按钮同理。...3.图片播放同时,下面小圆圈模块跟随一起变化。 4.点击小圆圈,可以播放相应图片。 5.鼠标不经过轮播图,轮播图也会自动播放图片。 6.鼠标经过,轮播图模块, 自动播放停止。...自动播放功能 添加一个定时器 自动播放轮播图,实际就类似于点击了右侧按钮 此时我们使用手动调用右侧按钮点击事件arrow_r.click() window.addEventListener...   // console.log(ul.children.length);    for (var i = 0; i < ul.children.length; i++) {        // 创建一个小...点击右侧按钮,小圆圈跟随一起变化 可以再声明一个变量控制小圆圈播放            circle++;            // 如果circle == 4 说明走到最后我们克隆这张图片了

1.4K30

「JavaScript 」动画基础 - 02

思路: 让盒子每次移动距离慢慢变小,速度就会慢慢落下来; 核心算法: (目标值 - 现在位置) / 10 做为每次移动距离步长; 停止条件是: 让当前盒子位置等于目标位置就停止定时器...点击右侧按钮一次,图片往左播放一张,以此类推,左侧按钮同理。 图片播放同时,下面小圆圈模块跟随一起变化。 点击小圆圈,可以播放相应图片。 鼠标不经过轮播图,轮播图也会自动播放图片。...鼠标经过,轮播图模块, 自动播放停止。 window.addEventListener('load', function() { // 1....// console.log(ul.children.length); for (var i = 0; i < ul.children.length; i++) { // 创建一个小...节流阀 防止轮播图按钮连续点击造成播放过快。 节流阀目的:当上一个函数动画内容执行完毕,再去执行下一个函数动画,让事件无法连续触发。

34020
领券