<audio>是HTML5新加入的用于播放音频的标签,HTML5已经得到广泛的支持,所以我们可以放心使用这个标签;利用它,可以轻松地在网页上播放音频,制作音乐播放器等。下面我们来聊聊它的属性和事件
目录
概念
元数据
- 歌曲元数据是帮助用户理解音乐类型的东西,这样他们就可以决定是否要听这首歌
- 它可以包含多种类型的信息,如音乐时长、类型、标题、艺术家、专辑名称、评级、内容、描述、演员、导演、对歌曲的评论、流派、标签、跟踪器编号等。
- 如果歌曲没有音乐元数据信息,可以通过在线网站或元数据软件手动或自动添加
属性
兼容性提示
- 可以在<audio></audio>标签中间写文字,当浏览器不支持<audio>时,就会显示这串文字(注意只是显示里面的文字,并不会显示标签<audio></audio>)。
- 示例:
<audio>
能看到这段话,说明您的浏览器不支持 audio 标签捏
</audio>
controls默认音乐控制面板
- 如果出现该属性,则将显示浏览器默认的音乐控制面板(不同浏览器不一样)
- 取值只有一个,即 controls="controls" 可简写为 controls
- 如果写 controls="none" 等其他值,也等同于显示音乐控制面板
- 示例1:
<audio controls>
能看到这段话,说明您的浏览器不支持 audio 标签捏
</audio>
- 示例2:
<audio controls="controls">
能看到这段话,说明您的浏览器不支持 audio 标签捏
</audio>
src音频文件链接
- src属性用于指定音频文件的链接
- 注意:
- 浏览器支持的音频文件格式可能各不相同,可能有mp3,wav,ogg,m4a,aac ......
- 综合考虑兼容性和文件大小的话,建议使用mp3
- 具体浏览器是否支持,可以调用后面介绍的canplaytype(type)函数检查。
- 示例:
<audio src="./song.mp3" controls>
能看到这段话,说明您的浏览器不支持 audio 标签捏
</audio>
source资源文件标签
- 除了上面的src属性可以指定资源文件链接,还可以在audio标签内写多个source标签来指定资源文件标签,但并不是说会顺着循环播放,而是浏览器会选择第一个支持的格式来进行播放。
- 示例:
<audio controls>
<source src="./song.ogg" type="audio/ogg">
<source src="./song.mp3" type="audio/mpeg">
能看到这段话,说明您的浏览器不支持 audio 标签捏
</audio>
autoplay自动播放
- 如果存在该属性,则音频在加载就绪后就会自动开始播放
- 取值只有一个:autoplay="autoplay",可简写为 autoplay
- 如果写 autoplay="none" 等其他值,等价于启用自动播放
- 因此如果需要控制,建议使用 js 调用 后面介绍的 play() 函数实现
- 注意:话是说可以自动播放,但目前很多浏览器由于用户体验,节省流量等原因,在一开始进入页面后并不会让音频自动播放,而是需要用户和页面有交互之后(即进行了点击(单击 onclick,双击 ondblclick,按下 onmousedown,松开 onmouseup,右击 oncontextmenu 等),键盘输入((按下 onkeydown,松开 onkeyup 等))等操作)才有用。具体则要看浏览器各自的规则。
- 在交互前使用autoplay可能会报错:DOMException: play() failed because the user didn't interact with the document first。
- 部分事件不算用户发生了交互(onmouseenter,onmouseleave,onmouseover,onmouseout)
- 对于<video>标签,可以设置muted静音后可以自动播放,但<audio>不行
- 解决办法:显然我们需要用户的交互动作,那么就需要在播放之前引导用户进行交互,可以是一个欢迎弹窗,教程弹窗等引导点击关闭。或是提供播放按钮,让用户点击后才进行播放。
- 示例1:
<audio autoplay>
您的浏览器不支持 audio 标签捏
</audio>
- 示例2:
<audio autoplay="autoplay">
您的浏览器不支持 audio 标签捏
</audio>
loop开启循环
- 有这个属性的时候,就会循环播放指定的音频文件
- 取值只有一个,即 loop="loop" ,可简写为 loop
- 如果写 loop="none" 等其他值,等价于开启循环
- 示例:
<audio loop src="./song.mp3">
您的浏览器不支持 audio 标签捏
</audio>
muted静音
- 存在这个属性时,则默认静音
- 注意只是默认静音,可以通过控制面板或js调节音量来取消静音
- 取值只有一个,即 muted="muted" ,可简写为 muted
- 示例:
<audio muted src="./song.mp3">
您的浏览器不支持 audio 标签捏
</audio>
preload预加载方式
- 设置音频的预加载方式
- 取值有三个:
- preload="auto",自动加载,页面加载后加载整个音频
- preload="metadata",自动加载,页面加载后只加载元数据
- preload="none",不自动加载
- preload="",等价于 auto
- 注意:autoplay属性优先级高于preload,若指定autoplay,则会忽略此属性,浏览器将自动加载音频以供播放。
- 示例:
<audio preload="auto" src="./song.mp3">
您的浏览器不支持 audio 标签捏
</audio>
JS操作属性
只读
这部分属性只能读取,不能进行赋值修改
duration音频总时长
- 双精度浮点数double。返回音频的总时长,单位为秒。
- 注意:如果音频元数据还没加载好,则这个值会是NaN
- 示例:
const audioDOM = document.getElementById("audio");
if (isNaN(audioDOM.duration)) {
// 未加载时的操作
} else {
// 已加载时的操作
}
paused是否暂停
- 布尔值boolean。如果音频是暂停状态,则返回 true ;否则返回 false
- 示例:
const audioDOM = document.getElementById("audio");
if (audioDOM.paused == true) { //如果是暂停状态
audioDOM.play(); //播放音频
} else { //如果正在播放
audioDOM.pause(); //暂停
}
ended是否播放完毕
- 布尔值boolean。音频播放完毕时,返回true,否则返回false
- 如果音频并没有开启loop循环,则可用这个属性判断是否播放完成。当然播放完毕时,会触发ended事件
currentSrc音频链接
- 字符串String。返回正在播放或加载的音频url链接,即浏览器在source标签里选择的文件。
buffered已缓存范围
- TimeRanges对象。表示浏览器已经缓存的音频范围
- buffered.length,完全加载时为1,但还没有加载完成之前,它可能是0(为0即为未加载或者加载错误),可能是2,3,4(已经加载这么多段,但还没有加载完成)等等
- buffered.start(index),返回浮点数,表示缓存的第index这一段的开头是第几秒。
- buffered.end(index),返回浮点数,表示缓存的第index这一段的结尾是第几秒。
- 注意:
- 调用start(index) 和end(index)之前,你需要判断length是否大于0,否则容易报错。
- 如果想以此做加载进度条,调用end(0)是不行的,因为在完全加载之前,它表示的是第一段加载的长度。建议这样写:buffered.end(buffered.length - 1)
- 示例(获取已加载的比例):
let audio = document.getElementById("audio");
let timeRanges = audio.buffered;
let num = 0;
/*获取已加载时长,然后除以歌曲时长,即可得到已加载比例*/
if(timeRanges.length > 0)
num = parseInt(timeRanges.end(timeRanges.length - 1) * 100 / audio.duration);
if (num > 100)
num = 100;
else if (num < 0)
num = 0;
seekable可跳转范围
- TimeRanges对象。同buffered。
networkState网络范围
- 获取音频的网络范围
- 取值:
- 0:NETWORK_EMPTY,音频尚未初始化
- 1:NETWORK_IDLE,浏览器已选择好采用什么编码格式来播放媒体,但尚未建立网络连接
- 2:NETWORK_LOADING,浏览器正在加载
- 3:NETWORK_NO_SOURCE,未找到音频资源
error发生错误
- MediaError对象。当发生错误时,会产生一个对象。如果目前没有错误,则返回null
- MediaError构成:
- code 错误码:
- MEDIA_ERR_ABORTED,音频加载加载过程中由于用户操作而被终止
- MEDIA_ERR_NETWORK,确认音频资源可用,但是加载时出现网路错误,音频加载被终止
- MEDIA_ERR_DECODE,确认音频资源可用,但是解码发生错误
- MEDIA_ERR_SRC_NOT_SUPPORTED,音频格式不被支持或者资源不可用
- message 错误描述信息
- code 错误码:
seeking是否移动或跳转播放进度
- 布尔值boolean,如果用户移动或者跳转了播放进度,则触发seeking事件,这个值会返回true
- 即使暂停状态,跳转和移动播放进度条也会触发。
- 示例:
<audio id="audio" controls src="song.mp3" onseeking="seeking">
您的浏览器不支持 audio 标签捏
</audio>
<script>
seeking:function(){
const audioDOM = document.getElementById("audio");
console.log(audioDOM.seeking);
}
</script>
可读写
这部分属性可以读取,也可以赋值修改
currentTime已播放时长
- 双精度浮点数double,返回已经播放的时长,单位为秒。可以给它赋值修改,来实现快进,回退,跳转等功能
- 取值应在 [0, (duration)]
- 示例:
const audioDOM = document.getElementById("audio");
if (audioDOM.currentTime > 5) {
audioDOM.currentTime -= 5;
} else {
audioDOM.currentTime = 0;
}
volume音量
- 双精度浮点数double,返回当前音量大小,默认为 1,值为0时为静音。可修改它来增大,降低音量
- 取值应在 [0, 1]
const audioDOM = document.getElementById("audio");
if (audioDOM.volume < 0.9) {
audioDOM.volume += 0.1;
} else {
audioDOM.volume = 1;
}
playbackRate播放速度
- 双精度浮点数double,返回当前播放速度,默认为 1,可以通过修改它来调速。
- 最大速度根据浏览器不同而可能不同,建议在2倍速以内
- 取值建议在 [0, 2]
- 2:2倍速
- 1.5:1.5倍速
- 1:正常速度
- 0.5:半速
- 0:不动,但仍然在播放状态
- 示例:
const audioDOM = document.getElementById("audio");
if (audioDOM.playbackRate >= 2)
audioDOM.playbackRate = 0.5;
else
audioDOM.playbackRate += 0.25;
标签属性控制
以下属性都会返回布尔值boolean,可读写设置对应的标签属性是否启用
- controls控制面板
- autoplay自动播放
- muted静音
- loop循环播放
- 示例:
const audioDOM = document.getElementById("audio");
audioDOM.controls = true;
if(audioDOM.loop == false){
audioDOM.loop = true;
}
JS操作函数
play()播放
- 调用该方法能让音频播放
- 注意:
- 同 autoplay 属性一样,在调用之前,需要用户和界面有互动,否则将报错!
- 示例:
const audioDOM = document.getElementById("audio");
if (audioDOM.canPlay == true) { //如果资源准备好可以播放
if (audioDOM.paused == true) //音频为暂停状态
audioDOM.play(); //播放
else
audioDOM.pause(); //暂停
}
pause()暂停
- 调用该方法能让正在播放的音频暂停
- 从 play() 的示例中已经很明显,我们可以通过paused来判断是否为暂停状态,不是则让它暂停,是则让它播放,由此则可以实现平常播放器中单个按钮实现暂停/播放功能
load()加载
- 如果没有设置 preload ,则可以在js调用该函数来触发加载
事件
加载生命周期
loadstart开始加载
- 开始加载音频了
durationchange时长改变
- 音频的总时长改变了。一般就是加载好歌曲的元数据了,或者是切换audio标签的src资源,即切换歌曲的时候。
loadedmetadata元数据加载完毕
- 可以用作判断“音频初始化”的方法。当然初始化也可以用duration属性是否为NaN或者durationchange来判断。其中元数据就包含有歌曲总时长,标题,艺术家等信息。
loadeddata数据开始加载
- 音频的第一帧加载完成时触发,此时整个音频还未加载完。
progress加载中
- 每次浏览器一加载,就会触发这个事件。
- 注意这个事件并不是在加载完成前一直触发,浏览器一般一开始只会加载一部分,然后等你播放或跳跃到和已经加载的音频差不多或是已经超过的时候,才会开始再加载一部分,以此直到完成加载整个音频。
- 加载进度条的长度改变函数,就可以绑定在这个事件上。
canplay可以播放
- 音频可以播放了。音频只加载了一部分,但已经可以开始播放了
- 可以通过这个事件来设置加载动画。触发前启用加载动画,触发后移除加载动画
canplaythrough可以播放整个音频
- 浏览器预计在不停下来进行缓冲的情况下,能够持续播放音频时会触发
其他事件
timeupdate已播放时长更新
- 即 currentTime 更新了,最频繁是每250毫秒触发一次。
- 播放进度条长度改变函数就可以绑定在这个事件上
waiting等待资源中
- 由于没有数据而导致暂停时触发。
- 可用于绑定加载动画
playing播放中
- 从waiting状态转换到可以播放的状态时触发。
play播放
- play()方法被调用时触发。
pause暂停
- pause()方法被调用时触发。
ended结束
- 音频播放完毕后触发。
- 当设置了autoplay时,不会触发这个事件
- 利用这个事件,可以实现播放列表的循环播放,随机播放。当触发时,切换src资源链接,并等待加载触发canplay,然后play()播放。
volumechange音量改变
- 音量改变时触发。
- 音量条的函数可以绑定在这个事件上
ratechange播放速率改变
- 播放速度改变时触发。
error发生错误
- 发生错误时触发。
Immerse yourself in the tantalizing fusion of Volt Pearls. A unique blend that balances strength and flavor!
На сайте https://4file.ru/ зарегистрируйтесь для того, чтобы начать скачивать файлы с высокой скоростью и абсолютно безопасно. Кроме того, получите доступ к файлам в любое время, когда вам удобно. Для комфорта выберете тот пакет услуг, который подходит вам больше всего. Есть стандартный, в который входит скачивание файлов без капчи и ожиданий. Поддержка 24/7. Кроме того, имеется пробный пакет. Первые 5 дней можно пользоваться программой за 1 рубль. Ежедневно сайтом пользуются несколько тысяч пользователей.
На сайте https://zamok-ok.ru/vskrytie-zamkov/ вы сможете оформить заявку на оперативный вызов мастера по вскрытию замков. Для вас установлены небольшие цены. А мастер приедет к вам домой в ближайшее время, чтобы устранить неполадку. При этом специалисты работают с замками любого вида, независимо от сложности. Замок будет вскрыт без деформаций и в минимальные сроки. Сотрудники работают в круглосуточном режиме. Если необходимо будет заменить замок на новый, то у специалиста с собой имеется весь арсенал.
На сайте https://aovniis.ru/uchebnyj-centr-vniis/programmy-obucheniya/podgotovka-ehkspertov-po-sistemam-menedzhmenta-smk/ запишитесь на курсы по подготовке экспертов по системам менеджмента. Она проходит в рамках дополнительного профессионального образования и длится в течение 72 часов. За это время вы получите всю необходимую информацию, которая потребуется вам как квалифицированному специалисту. Курс ведут компетентные и квалифицированные сотрудники с большим опытом.
На сайте https://garant-plus.ru/ вы сможете воспользоваться услугами агентства недвижимости, которое находится в Железнодорожном. «Гарант Плюс» работает с 1998 года и оказывает самые разные виды услуг, включая поиск объекта недвижимости для покупки или аренды, занимается продажей или оказывает помощь в покупке недвижимости. В компании трудятся компетентные и квалифицированные специалисты, которые помогут подобрать оптимальное для вас решение. При этом объект будет соответстсовать вашим запросам, материальным предпочтениям.
Dive into the icy freshness of Volt Deep Freeze. Revel in the exhilarating blend of strength and flavor!
На сайте https://zabor196.ru/ закажите заборы для дома и дачи, выполненные из пластика. К достоинствам таких конструкций относят то, что они долговечные и на них не появляются грибки, плесень, не подвергаются коррозии. Нет необходимости ежегодно окрашивать, обновлять дизайн. Не подвергаются агрессивному влиянию внешней среды. Материал не синтезирует и не поглощает вредные вещества. В компании можно заказать различные варианты заборов и самые необычные модификации. Стоимость будет привлекательной, чтобы воспользоваться услугой смогли все желающие.
A Clínica Dr. Günther Heller é uma referência em tratamentos de Invisalign, ClearCorrect e implantes dentais. Sob a liderança do Dr. Heller, a clínica oferece atendimento especializado e personalizado, utilizando tecnologia avançada para criar soluções personalizadas. Os tratamentos de Invisalign e ClearCorrect são realizados por especialistas experientes, proporcionando correção discreta de problemas de alinhamento dental. Além disso, a clínica é reconhecida pela excelência em implantes dentais, oferecendo soluções duradouras e esteticamente agradáveis. Com resultados excepcionais, o Dr. Günther Heller e sua equipe garantem a satisfação dos pacientes em busca de um sorriso saudável e bonito.
Experience the invigorating sensations offered by LYFT. Embrace the diverse flavors at your disposal!
Step into the vibrant world of flavor with LYFT Snus. Experience a unique blend of satisfaction!
Dive into the refreshing tropical experience with Lyft Tropic Breeze. Get lost in its tantalizing blend of flavors!
Embrace the unique taste of the best Lyft Ruby Berry out there. Discover the blend of rich flavors in our special selection!
Embark on a journey of taste and satisfaction with LYFT Nicotine Pouches. Discover a world of flavor variety!
Dive into the refreshing, high-quality experience with LYFT. Enjoy the outstanding range of flavors!
For a unique and extraordinary snus experience, try our Lyft London Flair today!
На сайте https://vibortv.ru/ вы сможете ознакомиться с полезной информацией, рекомендациями, которые касаются того, как правильно выбрать телевизор. Вы узнаете о том, что означают определенные термины и понятия, о том, какая диагональ подходит именно для вашего случая. Для того чтобы насладиться четкой картинкой, лучше выбирать диагональ побольше. Именно от размера зависит четкость картинки и качество изображения. Есть описание технологий QLED и OLED, их различия. Все рекомендации помогут принять правильное решение.
На сайте https://www.parvenik.ru/ каждый желающий сможет приобрести не только качественный, натуральный веник, но и сопутствующие товары. К примеру, травы в мешочках, эфирные масла, травы в пучках и многое другое по доступным ценам. Чем больше вы закажете, тем выгодней будет ваша скидка. Материал для создания продукции использовался только натуральный, выращенный в экологически чистых и безопасных районах. Каждый месяц на определенные товары устанавливается скидка, что позволит приобрести все нужное и по хорошей цене.
На сайте https://americandental.ru закажите звонок для того, чтобы записаться на консультацию в стоматологию в Москве. Все услуги выполняются под ключ, на работы даются гарантии. На портале вы сможете ознакомиться с расценками на различные виды работ. В стоматологии выполнят установку виниров, протезирование керамическими коронками, имплантацию. Вы сможете воспользоваться полным комплексом услуг как для взрослых, так и детей. Доступна консультация, а записаться можно на любое, наиболее комфортное время.
На сайте https://www.dosugomska.ru/ изучите все предложения Омска, связанные с проведением как детского, так и взрослого досуга. Перед вами развлекательные центры, а также агентства по проведению детских праздников, большой выбор аквапарков, компании по проведению квестов, бары, детские игровые площадки и многое другое. При этом вовсе не обязательно выкладывать крупную сумму для того, чтобы как следует развлечься и получить больше эмоций от удачно проведенного времени. Ознакомьтесь с заинтересовавшим вас местом поближе, почитайте номер телефона.
На сайте https://sam-sravni.ru/ вы сможете сравнить цены разных страховых компаний – здесь их порядка 14 наименований. И всего за пару минут поиска вы сможете сэкономить до нескольких тысяч. Здесь же вы сможете отыскать и те компании, которые предоставляют ипотечное страхование. У вас получится рассчитать стоимость сразу в 7 компаниях, что позволит подобрать наиболее оптимальное решение. На сайте можно будет заказать и оформление ОСАГО. Сервис подберет оптимальный вариант. Будут учтены все скидки.
top models fansly
스포츠중계
кольцо для предложения цена
На сайте https://evgenev.ru/ представлен каталог лучших и мощных курсов, которыми можно воспользоваться в режиме реального времени. При этом на них обучают только трендовым профессиям, которые востребованы в этом году. Есть курсы обучения как для взрослых, так и детей. Изучите весь список. Среди всех вариантов вы обязательно подберете для себя то, что будет соответствовать предпочтениям. Быстрее освойте новую профессию, чтобы начать больше зарабатывать или иметь дополнительный доход.
На сайте https://links-expo.ru/ почитайте интересные, увлекательные и свежие новости, которые касаются Москвы и области. Здесь представлена информация обо всех событиях. Весь материал составлен компетентными и опытными авторами, которые отслеживают информацию, чтобы вы узнали о ней первым. Как только в России что-то произойдет, то моментально отображается на страницах сайта. Регулярно публикуется курс валют, что позволит вам первым узнать его. Кроме того, имеется прогноз погоды, который сориентирует, как одеться сегодня.
сколько стоит обручальное кольцо на заказ
купить обручальные кольца на заказ
На сайте https://vladlink.ru/ вы сможете подключиться к независимому оператору во Владивостоке – Владлинку. Здесь вы сможете ознакомиться со всеми тарифами относительно телевидения, интернета. Если вы оформите подписку на год, то сможете получить скидку 20%. Выберете тот пакет, который вас больше всего устроит. Есть целый комплекс услуг по вполне бюджетной стоимости, а также пакет услуг для наиболее экономных, а также оптимальный тариф, рекомендованный провайдером. Вы получите тот пакет услуг, который вас больше всего устроит.
На сайте http://www.biosnpf.ru/ закажите производство высококачественных БАДов. Компания находится на рынке более 32 лет, а потому выучила все технологические процессы, чтобы предложить клиенту только лучшее. Специально для вас практикуется полный производственный цикл. В обязательном порядке соблюдаются все стандарты качества, чтобы предложить вам продукцию, созданную по инновационным технологиям. В списке самых популярных услуг: капсулирование, блистерование, фасовка в банку.
На сайте https://www.dosugnovosib.ru/ ознакомьтесь с вариантами проведения досуга как для взрослых, так и детей. Важным моментом является то, что вы обязательно подберете для себя вариант, исходя из предпочтений, требований, запросов, а также материального положения. Есть развлечения как для взрослых, так и детей. На сайте представлено огромное количество детских развлекательных центров, пейнтбольный клуб, сервис, предоставляющий аренду кальянов. Напротив каждого заведения имеется ценная дополнительная информация.
If you’re in search of a refreshing snus experience, try our Lyft Cool Eucalyptus for a unique sensation!
For a blooming and refreshing snus experience, try our Lyft Bloom today!
Looking for a new snus experience? Try our Lyft Ice Cool Mint for an invigorating and refreshing taste!
If you’re in search of a refreshing snus experience, try our Lyft Freeze for a unique sensation!
https://twitter.com/kmril240771/status/1661607351936319489
https://ok.ru/profile/583654902998/statuses/156096005895126
https://www.facebook.com/permalink.php?story_fbid=pfbid034Zfy46K9hDiaLkWDk5xpCXHyKRP24txnVKkexjD8PHbKcpRktbQoxer3hBQkLd44l&id=100089297356592&__cft__%5D=AZWRlJRlaKZ6efpbIaCdsmZBXe5ySpn9u8C2_CKUD8QBzjoOZez0C3lwBHYpBFnJqWq5gCJxykJLrxYXXm0Pz3_p7zLcTWpYaoYli_kRBG08aw&__tn__=%2CO%2CP-R
https://ext-6333783.livejournal.com/9399.html
https://www.linkedin.com/posts/tolik-orlov-052a77272_%D0%BC%D0%B5%D1%85%D0%B0-%D0%BC%D0%BE%D1%81%D0%BA%D0%B2%D0%B8%D1%87%D0%BA%D0%B0-%D0%BF%D0%B5%D1%80%D0%B5%D1%88%D0%B8%D0%B2-%D1%88%D1%83%D0%B1%D1%8B-%D0%BC%D0%B5%D1%85%D0%BE%D0%B2%D0%BE%D0%B5-%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%B5-activity-7068056183751790592-fnhG
If you’re looking for a tropical snus experience, try our Lyft Caribbean Spirit for a refreshing sensation!
https://web.facebook.com/permalink.php?story_fbid=pfbid02HtzGzEHwiMQXLmxutnmQBKEof3GnffUVTL6jJKUhF4BX15qoB8e9m7FbiBVEp2CAl&id=100092389320690&__cft__%5D=AZUipDYazAzQ7VjaBnkc5WRSoyR1rTEn4B8DeZKktxFgIABgGIWL1chD_qmGrsRl9bnAznxbbvLG3UvtSsv0hwYf9gmNLttW_zFs9OKrOmNz1Q&__tn__=%2CO%2CP-R
https://ok.ru/profile/583654902998/statuses/156088543376342
https://www.facebook.com/permalink.php?story_fbid=pfbid02juqNP456E5pcddLSuPFaR227Kuqovt2TSp78pu56X9AsVZTezdkpHDAd6bSL9rPgl&id=100090394276052&__cft__%5D=AZVoH10MRiOnTNm9jF1rcHt8HTByHgplWjacberJnm4w78lV5bc5wIlpRxxeVdnPWrByxUBCzfKTBbb0RXNSUNmYgeFn2Rqyy_10jgfZqqnnIA&__tn__=%2CO%2CP-R
Looking for a unique snus experience? Try out our Lyft Cool Air X for a chilling sensation like never before!
https://www.tumblr.com/reblog/sizzlingtimemachinewhispers/718405248043122688/BT4Y9FtU
https://ok.ru/discussions/3/156247563153576
https://www.facebook.com/permalink.php?story_fbid=pfbid0375uU4hYUczxASXvymzRodC4a4Gp7R9npK2Fb93Ww4yYrTqm3apopjT3qZHPkCcMPl&id=100089977154743&__cft__%5D=AZV-XDRLkEFMRvdTaQHTNp1Rv9QXXpskTyB5vVy8Bk6mHRD_mXse-s1ppCYiBBVokGPH-Is6-UswLRr8ukr7VEfpu-eQQtsvqJxyLywgr2DnvA&__tn__=%2CO%2CP-R
https://www.linkedin.com/posts/soton-soto-3aa222268_%D0%BC%D0%B5%D1%85%D0%B0-%D0%BC%D0%BE%D1%81%D0%BA%D0%B2%D0%B8%D1%87%D0%BA%D0%B0-%D0%BF%D0%B5%D1%80%D0%B5%D1%88%D0%B8%D0%B2-%D1%88%D1%83%D0%B1%D1%8B-%D0%BC%D0%B5%D1%85%D0%BE%D0%B2%D0%BE%D0%B5-%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%B5-activity-7068161647604871168-isXc?utm_source=share&utm_medium=member_desktop
https://twitter.com/Nikolai7947363/status/1660686654875549701
https://www.tumblr.com/ghtggf/718266640902602752/%D0%BC%D0%B5%D1%85%D0%B0-%D0%BC%D0%BE%D1%81%D0%BA%D0%B2%D0%B8%D1%87%D0%BA%D0%B0-%D0%BF%D0%B5%D1%80%D0%B5%D1%88%D0%B8%D0%B2-%D1%88%D1%83%D0%B1%D1%8B-%D0%BC%D0%B5%D1%85%D0%BE%D0%B2%D0%BE%D0%B5-%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%B5?source=share